Junit的基础学习
一个强大的单元测试框架:
一、组成部分:
1.注解:
(1)@Test 注解: 放在测试方法上,表示这是用于测试其他方法的一个测试单元
@Test public void testSum1(){ System.out.println("测试SumUtil类的方法sum1"); int result = SumUtil.sum1(1,2); Assert.assertEquals(result,3); }
(2)@Before 注解: 放在方法上,表示在测试之前要做的事情,比如开启数据库连接之类的
@Before public void before(){ System.out.println("测试之前做的事"); }
(3)@After 注解: 放在方法上,表示在测试之后要做的事情
@After public void after(){ System.out.println("测试之后做的事"); }
(4)@BeforeClass 注解: 修饰的方法会在所有方法被调用前执行,且该方法要是静态的,所以当测试类被加载后就接着运行它,而且在内存中他只会存在一份实例,他比较适合加载配置文件
@BeforeClass public static void beforeClass(){ System.out.println("在测试之前的之前需要做的事"); }
(5)@AfterClass 注解: 所修饰的方法通常用来对资源管理,如关闭数据库连接(针对所有测试,只执行一次 )
@AfterClass public static void afterClass(){ System.out.println("在测试之后的之后需要做的事"); }
(6)@Ignore 注解:忽略这个方法,不要测试它,让它一个人呆着
@Ignore public void testSum2(){ System.out.println("测试sum2"); int result = SumUtil.sum2(1,2,3); Assert.assertEquals(result,6); }
这里给一个实现上面所有注解的方法后,测试一个方法之后的结果: 这样就能明白每个注解的方法会在什么时候运行
在测试之前的之前需要做的事
测试之前做的事
测试SumUtil类的方法sum1
测试之后做的事
在测试之后的之后需要做的事
2.Assert:关于 Assert的用法,除了举例里的判断数字是否相等,还可以判断boolean, 是否是null ,是否是相同对象等等常见逻辑。
二、多个测试:
准备两个TestCase:
public class TestCase1 { @Before public void before(){ System.out.println("测试之前做的事"); } @After public void after(){ System.out.println("测试之后做的事"); } @BeforeClass public static void beforeClass(){ System.out.println("在测试之前的之前需要做的事"); } @AfterClass public static void afterClass(){ System.out.println("在测试之后的之后需要做的事"); } @Test public void testSum1(){ System.out.println("TestCase1测试testSum1"); int result = SumUtil.sum1(1,2); Assert.assertEquals(result,3); } @Test public void testSum2(){ System.out.println("TestCase1测试testSum1"); int result = SumUtil.sum2(1,2,3); Assert.assertEquals(result,6); } }
public class TestCase2 { @Test public void testSum1(){ System.out.println("TestCase2测试testSum1"); int result = SumUtil.sum1(1,2); Assert.assertEquals(result,3); } @Test public void testSum2(){ System.out.println("TestCase2测试testSum1"); int result = SumUtil.sum2(1,2,3); Assert.assertEquals(result,6); } }
然后创建一个TestSuite来统一测试两个类中的测试方法:
@RunWith(Suite.class) @Suite.SuiteClasses({TestCase1.class,TestCase2.class}) public class TestSuite { }
得到的结果是:
测试之前做的事
TestCase1测试testSum1
测试之后做的事
测试之前做的事
TestCase1测试testSum1
测试之后做的事
在测试之后的之后需要做的事
TestCase2测试testSum1
TestCase2测试testSum1
在测试之前的之前需要做的事
从这里也可以看到,@Before和@After注解会在其所在的类中,为每次测试执行一次