JUnit SetUp / TearDown

通常在执行测试用例之前,需要做一些设置,或者MOCK一些数据。可以在每个测试用例中都写一段这样的逻辑,但是更好的一种做法是覆写TestCasesetupteardown方法。如下:

public class JUnitTestCaseWOAnnotation extends TestCase {
    
    private AccountService accountService = new AccountService();
    private Account dummyAccount;
    
    //覆写该方法,做些准备工作
    @Override
    protected void setUp() throws Exception {
        System.out.println("Setting it up!");
        dummyAccount = accountService.getAccountDetails();
    }
    
    public void testDummyAccount() {
        System.out.println("Running: testDummyAccount");
        assertNotNull(dummyAccount.getAccountCode());
    }
    public void testDummyAccountTransactions() {
        System.out.println("Running: testDummyAccountTransactions");
        assertEquals(dummyAccount.getAccountTransactions().size(),3);
    }
    
        //覆写该方法,做些必要的清理工作
    @Override
    protected void tearDown() throws Exception {
        System.out.println("Running: tearDown");
        dummyAccount = null;
        assertNull(dummyAccount);
    }

}

另一种更推荐的做法是使用注解@Before@After

public class JUnitTestCaseWAnnotation {
    
    private AccountService accountService = new AccountService();
    private Account dummyAccount;
    
     // setup()
    @Before
    public void before() throws Exception {
        System.out.println("Setting it up!");
        dummyAccount = accountService.getAccountDetails();
    }
    
    @Test
    public void testDummyAccount() {
        System.out.println("Running: testDummyAccount");
        assertNotNull(dummyAccount.getAccountCode());
    }
    @Test
    public void testDummyAccountTransactions() {
        System.out.println("Running: testDummyAccountTransactions");
        assertEquals(dummyAccount.getAccountTransactions().size(),3);
    }

     // tearDown()
    @After
    public void after() throws Exception {
        System.out.println("Running: tearDown");
        dummyAccount = null;
        assertNull(dummyAccount);
    }

}

类似的注解还有@BeforeClass@AfterClass。比较如下:
@BeforeClass会在所有测试用例执行之前执行。且只会执行一次;
@Before会在每个测试用例执行之前都执行一次。
@AfterClass@After 的比较类似。
此外,

  1. @BeforeClass@AfterClass只能注释static方法。
  2. 无论@BeforeClass@Before是否执行成功,或有异常抛出,@AfterClass@After都会执行。

引用
JUnit SetUp / TearDown Example
Difference between @Before and @BeforeClass.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容