Junit单元测试 末蓝、 2023-05-30 06:16 37阅读 0赞 #### 单元测试 #### **作用:** 在写完代码的时候,测试写好的程序是否存在bug。 **与一般测试的区别:** 一般测试(main方法测试): public class T { public int add(int x, int y) { return x + y; } public static void main(String[] args) { System.out.println(new T().add(1, 2)); } } 存在问题: 1. 不能多个函数多个类一起运行,这个在需要测试的方法非常多的时候很不方便 2. 大多数需要人为观察输入输出是否正确 使用Junit import org.junit.*; import static org.junit.Assert.*; public class TTest { @Test public void add() { int add = new T().add(1, 2); assertEquals(3, add); } } > keeps the bar green,to keep the code clean. 这句话表示绿色为测试通过: ![测试通过][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpMzQ1NTI3NzkyNQ_size_16_color_FFFFFF_t_70] 如果测试失败为红色(例如将结果改为4): ![测试失败][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpMzQ1NTI3NzkyNQ_size_16_color_FFFFFF_t_70 1] #### Junit中方法 #### **`assertXxx`类型的函数一般用来测试是否满足条件** 如:`assertEquals(long expected, long actual)`测试`expected`和`actual`是否相等,如上面的例子所示。 **带有message参数的重载** 查看文档我们会发现,有很多带有message参数函数重载,这个参数的作用是在测试失败的时候打印的信息。 ![重载][20191107211231530.png] 如下: ![测试message][message] **assertThat** assertThat接受两个参数,使我们可以以英语语法的形式来达到我们想要的测试效果了,例如可以使用下面代码代替刚才的assertEquals: import org.junit.*; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; public class TTest { @Test public void add() { int add = new T().add(1, 2); assertThat(add, is(3)); } } #### 注解 #### @Test表示这个方法是一个测试方法,有两个参数,expected表示期望抛出什么异常,timeout表示程序的最长运行时间,超过指定的时间就会测试失败(单位是毫秒)。 ![@Test注解][Test] @Ignore表示被忽略的测试方法,加上该注解之后这个方法不会被执行 @Before和@After表示在每一次执行测试方法的前后执行 @BeforeClass和@AfterClass分别在类初始化之前执行,所以必须为静态方法。用于加载配置文件,连接数据库等。 package com.qianyu; import org.junit.*; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; public class TTest { @BeforeClass public static void beforeClass() { System.out.println("TTest.beforeClass"); } @Before public void before() { System.out.println("TTest.before"); } @Test public void add() { assertThat(new T().add(1, 2), equalTo(3)); System.out.println("TTest.add"); } @Test public void add2() { assertThat(new T().add(2, 2), equalTo(4)); System.out.println("TTest.add2"); } @Ignore public void ignore() { System.out.println("TTest.ignore"); } @After public void after() { System.out.println("TTest.after"); } @AfterClass public static void afterClass() { System.out.println("TTest.afterClass"); } } 运行结果: ![测试结果][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpMzQ1NTI3NzkyNQ_size_16_color_FFFFFF_t_70 2] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpMzQ1NTI3NzkyNQ_size_16_color_FFFFFF_t_70]: https://img-blog.csdnimg.cn/20191107205637962.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpMzQ1NTI3NzkyNQ==,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpMzQ1NTI3NzkyNQ_size_16_color_FFFFFF_t_70 1]: https://img-blog.csdnimg.cn/20191107205722345.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpMzQ1NTI3NzkyNQ==,size_16,color_FFFFFF,t_70 [20191107211231530.png]: https://img-blog.csdnimg.cn/20191107211231530.png [message]: https://img-blog.csdnimg.cn/20191107211351861.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpMzQ1NTI3NzkyNQ==,size_16,color_FFFFFF,t_70 [Test]: https://img-blog.csdnimg.cn/20191107214320463.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpMzQ1NTI3NzkyNQ==,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpMzQ1NTI3NzkyNQ_size_16_color_FFFFFF_t_70 2]: https://img-blog.csdnimg.cn/20191107215601289.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpMzQ1NTI3NzkyNQ==,size_16,color_FFFFFF,t_70
还没有评论,来说两句吧...