Google Code Prettify

2018年3月23日 星期五

spring boot RESTful 程式的單元測試

用 spring boot 寫 RESTful service,如果要單元測試很簡單,如下:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class LibraryControllerTest {
 
    @LocalServerPort
    private int port;

    @Test
    public void test() {
        RestTemplate rest = new RestTemplate();
  
        List model = rest.getForObject("http://localhost:" + port + "/library/book", List.class);
        assertNotNull(model);  
    }
}
只要加上紅色的部份,執行單元測試不需要先啟動 ap server,直接執行,spring boot 會自動執行 embedded tomcat 並且動態的找到一個可以用的 port 進行測試。但是 … 如果只是這樣寫,很可能測試時會出現 403 Forbidden 的錯誤,這是因為 spring boot 自動加上的 web security,所以,要改變一下設定,如下,我新增了一個 SecurityConfig 的類別 …
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter { 
    @Override 
    protected void configure(HttpSecurity http) throws Exception {   
        http.authorizeRequests().anyRequest().permitAll();
    }
}
這個類別要繼承 WebSecurityConfigurerAdapter,並 override configure(HttpSecurity http) method,在裡面改變 request 的權限設定,我這裡很偷懶的全部的 request 都允許存取,實務上當然會加上一些限制。



沒有留言:

張貼留言