4.1 @禁用
現在讓我們看一下 JUnit 框架的一些非常有用和流行的註釋。第一個註釋允許您關閉特定測試,以便 JUnit 不調用它。如果您注意到測試無法正常工作,或者您更改代碼並且測試意外中斷,則需要它。
正如我之前所寫,99% 的測試都沒有人支持,所以它們遲早會被禁用。因此,此註釋是有用註釋列表中的第一個。
考慮她的例子:
public class AppTest {
@Disabled("Test is temporarily disabled. True, true")
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
在上面的示例中,testOnDev()
不會調用該方法。順便說一下,註解@Disabled
可以寫在類聲明之前,那麼它的所有方法都將被忽略。
@Disabled("Temporarily turned off the test, we will fix it by May 2001")
public class AppTest {
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
4.2 @嵌套
JUnit 允許您在嵌套類上調用測試方法。我的意思是嵌套測試類。你不會經常遇到它們,但有這種可能性,所以你需要了解它是什麼。
要在聲明之前調用嵌套類的方法,您需要編寫一個註解@Nested
。例子:
public class AppTest {
@Nested
public class DevStagingEnvironment {
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
@Nested
public class ProductionEnvironment {
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
}
可以在官方文檔中找到更多詳細信息。
4.3 @ExtendWith
另一個有用的註解是@ExtendWith
. 您很可能會經常見到她,所以讓我們更詳細地了解一下她。
JUnit 是一個強大的框架,允許您編寫各種插件(擴展)以靈活定制您的工作。一些擴展可以收集有關測試的統計信息,其他可以模擬內存中的文件系統,其他可以模擬在 Web 服務器內部工作,等等。
如果您的代碼在一個框架(例如 Spring)中運行,那麼幾乎總是這個框架會管理您代碼中對象的創建和配置。因此,一個專門的測試插件是必不可少的。例子:
示例 1.擴展WebServerExtension
傳遞給被調用的測試方法URL
以便正常工作。
@Test
@ExtendWith(WebServerExtension.class)
void getProductList(@WebServerUrl String serverUrl) {
WebClient webClient = new WebClient();
// Use WebClient to connect to web server using serverUrl and verify response
assertEquals(200, webClient.get(serverUrl + "/products").getResponseStatus());
}
這就是測試通常如何開始測試與 Spring 框架一起工作的代碼:
@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class TestServiceTest {
@MockBean
TestService service;
@Test
void test() {
assertNotNull(service); // Test succeeds
}
}
SpringExtension
創建 Spring 框架的測試版本,但MockitoExtention
允許您創建假對象。假對像是一個非常有趣的話題,我們肯定會談到它,但稍後會談。
4.4 @超時
讓我們用一個小而有趣的註解來結束這個講座@Timeout
。它允許您設置運行測試的時間。如果測試花費的時間超過註釋中指定的時間,則認為失敗。
class TimeoutDemo {
@Test
@Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
void failsIfExecutionTimeExceeds100Milliseconds() {
// test will fail if it takes more than 100 milliseconds
}
}
我們的講座到此結束。
GO TO FULL VERSION