一直以来,使用junit的原因是可以单独运行方法,不用在写大量的main方法了,而且喜欢使用System.out来输出测试结果
直到最近读了一篇关于junit的文章才知道junit的强大之处以及自已使用上的错误….
正确建立Junit Test Case
以前就是直接建立一个类,然后写上一堆方法,在方法上加上@Test注解然后单独运行方法
正确的做法是使用Junit Test Case创建向导来创建
方法名为要测试的类名+Test
可以选择要自动创建的初始化和销毁方法和父类(一般用不到)
最主要的是选测要测试的类,Class under test,后面可以直接选择要测试的方法
生成的代码如下
public class AdminServiceTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } @AfterClass public static void tearDownAfterClass() throws Exception { } @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void testLogin() { fail("Not yet implemented"); } @Test public void testExportLoginLog() { fail("Not yet implemented"); } } |
注解
常见的注解如下
方法的执行顺序为,假设有两个@Test的测试用例
@BeforeClass –> @Before –> @Test –> @After –> @Before –> @Test –> @After –> @AfterClass
●@Before 初始化方法
●@After释放资源
●@Test测试方法,在这里可以测试期望异常和超时时间
●@Ignore忽略的测试方法
●@BeforeClass针对所有测试,只执行一次,且必须为static void
●@AfterClass针对所有测试,只执行一次,且必须为static void
●@RunWith指定测试类使用某个运行器
●@Parameters指定测试类的测试数据集合
●@Rule允许灵活添加或重新定义测试类中的每个测试方法的行为
●@FixMethodOrder指定测试方法的执行顺序
断言
断言是编写测试用例的核心实现方式,即期望值是多少,测试的结果是多少,以此来判断测试是否通过
注意下面的断言方法有多种重载方式,使用时多读一下api
●assertArrayEquals(expecteds, actuals)查看两个数组是否相等
●assertEquals(expected, actual)查看两个对象是否相等。类似于字符串比较使用的equals()方法
●assertNotEquals(first, second)查看两个对象是否不相等。
●assertNull(object)查看对象是否为空。
●assertNotNull(object)查看对象是否不为空。
●assertSame(expected, actual)查看两个对象的引用是否相等。类似于使用“==”比较两个对象
●assertNotSame(unexpected, actual)查看两个对象的引用是否不相等。类似于使用“!=”比较两个对象
●assertTrue(condition)查看运行结果是否为true。
●assertFalse(condition)查看运行结果是否为false。
●assertThat(actual, matcher)查看实际值是否满足指定的条件
●fail()让测试失败
@Test public void testAssertEquals() { int a = 1 + 1; a++;//假设这里改变了 // Assert.assertEquals(2, a); Assert.assertEquals("1+1应该为2", 2, a); } |
测试肯定是未通过的,输出信息如下