Spring-boot官方案例分析之log4j
運行單元測試分析:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SampleActuatorApplication.class)
@WebAppConfiguration
@IntegrationTest("server.port=0")
@DirtiesContext
進行單元測試的注解配置:
@SpringApplicationConfiguration(classes=SampleAactuatorApplication.class)表示要啟動的程序入口類
@DirtiesContext當上下文遭到破壞時,會重新注冊上下文
接下來聲明一個測試類:
於是Web項目,Junit需要模擬ServletContext,因此我們需要給我們的測試類加上@WebAppConfiguration
@IntegrationTest("server.port=0")使用0表示端口號隨機,也可以具體指定如8888這樣的固定端口
public class SampleActuatorApplicationTests {
@Value("${local.server.port}")
private int port;
@Test
public void testHome() throws Exception {
@SuppressWarnings("rawtypes")
ResponseEntity<Map> entity = new TestRestTemplate().getForEntity(
"http://localhost:" + port, Map.class);
assertEquals(HttpStatus.OK, entity.getStatusCode());
System.out.println("entity.getStatusCode():"+entity.getStatusCode());
@SuppressWarnings("unchecked")
Map<String, Object> body = entity.getBody();
assertEquals("Hello Phil", body.get("message"));
System.out.println(body.get("message"));
//
}
}
注入配置文件中的值到屬性port中;@Value
聲明測試類:
@SuppressWarnings("rawtypes")
是壓制警告
k也可以使用@Rule
public OutputCapture capture=new OutputCapture();
但是在新版的Junit中,assertEquals 方法已經被廢棄,它建議我們使用assertArrayEquals,旨在讓我們測試一個方法的時候多傳幾種參數進行多種可能性測試。
通過@Autowired可以織入容器中自己想要測試的對象。
控制器里面定義了請求匹配的@RequestMapping
同時注入了HelloWorldService組件,HelloWorldService注入ServiceProperties類,程序入口為SampleActuatorApplication類;
在測試類里進行單元測試,模擬請求
@Test
public void TestName(){
@SuppressWarnings("rawtypes")
ResponseEntity<Map> entity=new TestRestTemplate().getForEntity(
"http://localhost:" + port, Map.class);
System.out.println(port);
assertEquals(HttpStatus.OK,entity.getStatusCode());
// System.out.println("name:" +name);
@SuppressWarnings("unchecked")
Map<String,Object> body=entity.getBody();
assertEquals("Hello Phil",body.get("message"));
System.out.println(body.get("message"));
}