1. 程式人生 > >Junit常用註解

Junit常用註解

Junit常用註解

0x01 摘要

本文簡要說下junit裡面常用註解的含義和使用,還會總結一些常用的Assert判斷語句。

0x02 常用Junit註解

2.1 @Test

用在方法上,定義該方法是測試方法。

注意:測試方法必須是public void,但可以拋異常,不過一般不這麼做。

例子:

@Test (timeout = 30000)
  public void testRMAppSubmitInvalidResourceRequest() throws Exception {
    asContext.setResource(Resources.createResource
( YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_MB + 1)); // submit an app try { appMonitor.submitApplication(asContext, "test"); Assert.fail("Application submission should fail because resource" + " request is invalid."); } catch (YarnException e)
{ // Exception is expected // TODO Change this to assert the expected exception type - post YARN-142 // sub-task related to specialized exceptions. Assert.assertTrue("The thrown exception is not" + " InvalidResourceRequestException", e.getMessage().contains("Invalid resource request"
)); } }

2.2 @BeforeClass

2.2.1 含義

用來修飾所有@Test方法之前只會執行一次的方法。

注意:需用public static void 修飾。

2.2.2 用途

當你的測試中多個方法都會用到的一些公共方法可以抽取到用@BeforeClass修飾的方法彙總,如建立資料庫驅動等。

2.2.3 示例

@BeforeClass
public static void loadDriver(){
    try {
        Class.forName("org.apache.phoenix.queryserver.client.Driver");
    } catch (ClassNotFoundException e) {
        logger.error("an exception happened while load driver:", e);
    }
}

2.3 @AfterClass

2.3.1 含義

@AfterClass和前面提到的@BeforeClass類似,但是在所有@Test方法之後執行一次。

注意:需用public static void 修飾。

2.3.2 用途

一般他被來處理一些資源清理工作,如關閉資料庫連線等。

2.3.3 示例

@AfterClass
public static void closeConnections(){
    for(Connection conn : connectionList){
        try {
            conn.close();
        } catch (SQLException e) {
            logger.error("an exception happened while close connection:", e);
        }
    }
}

2.4 @Before

2.4.1 含義

@Before@BeforeClass類似,他們最大區別在於@Before會在每個@Test方法執行之前都會執行一次。

注意:必須用public void修飾,不能加static

2.4.2 用途

用於每個測試用例都需要的單獨的方法,比如獲取插入一條記錄到資料。

2.4.3 示例

@Before
public void setUp() {
  long now = System.currentTimeMillis();

  rmContext = mockRMContext(1, now - 10);
  ResourceScheduler scheduler = mockResourceScheduler();
  Configuration conf = new Configuration();
  ApplicationMasterService masterService =
      new ApplicationMasterService(rmContext, scheduler);
  appMonitor = new TestRMAppManager(rmContext,
      new ClientToAMTokenSecretManagerInRM(), scheduler, masterService,
      new ApplicationACLsManager(conf), conf);

  appId = MockApps.newAppID(1);
  RecordFactory recordFactory = RecordFactoryProvider.getRecordFactory(null);
  asContext =
      recordFactory.newRecordInstance(ApplicationSubmissionContext.class);
  asContext.setApplicationId(appId);
  asContext.setAMContainerSpec(mockContainerLaunchContext(recordFactory));
  asContext.setResource(mockResource());
  setupDispatcher(rmContext, conf);
}

2.5 @After

2.5.1 含義

@After@AfterClass類似,他們最大區別在於@After會在每個@Test方法執行之後都會執行一次。

注意:必須用public void修飾,不能加static

2.5.2 用途

可以用來清理每個@Test@Before建立的單獨資源、恢復測試初始狀態等。

2.5.3 示例

@After
public void tearDown() {
  setAppEventType(RMAppEventType.KILL);
  ((Service)rmContext.getDispatcher()).stop();
}

2.6 @Runwith

2.6.1 含義

首先要分清幾個概念:測試方法、測試類、測試集、測試執行器:

  • 其中測試方法就是用@Test註解的一些函式
  • 測試類是包含一個或多個測試方法的一個Test.java檔案
  • 測試集是一個suite,可能包含多個測試類
  • 測試執行器則決定了用什麼方式偏好去執行這些測試集/類/方法

而@Runwith就是放在測試類名之前,用來確定這個類怎麼執行的。也可以不標註,會使用預設執行器。

常見的執行器有:

  1. @RunWith(Parameterized.class) 引數化執行器,配合@Parameters使用junit的引數化功能
  2. @RunWith(Suite.class)
    @SuiteClasses({ATest.class,BTest.class,CTest.class})

測試集執行器配合使用測試集功能

  1. @RunWith(JUnit4.class)

junit4的預設執行器

  1. @RunWith(JUnit38ClassRunner.class)

用於相容junit3.8的執行器

  1. 一些其它執行器具備更多功能。例如@RunWith(SpringJUnit4ClassRunner.class)集成了spring的一些功能

2.7 @Parameters

用於使用引數化功能。

0xFF 參考文件

junit常用註解詳細說明