Junit使用教程(二)

http://blog.csdn.net/wangpeng047/article/details/9628449

二、核心——断言

断言是编写测试用例的核心实现方式,即期望值是多少,测试的结果是多少,以此来判断测试是否通过。

1. 断言核心方法

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()

让测试失败

2. 示例

[java] view plain copy

  1. package test;  
  2. import static org.hamcrest.CoreMatchers.*;  
  3. import static org.junit.Assert.*;  
  4. import java.util.Arrays;  
  5. import org.hamcrest.core.CombinableMatcher;  
  6. import org.junit.Test;  
  7. public class AssertTests {  
  8. @Test
  9. public void testAssertArrayEquals() {  
  10. byte[] expected = "trial".getBytes();  
  11. byte[] actual = "trial".getBytes();  
  12.         org.junit.Assert.assertArrayEquals("failure - byte arrays not same", expected, actual);  
  13.       }  
  14. @Test
  15. public void testAssertEquals() {  
  16.         org.junit.Assert.assertEquals("failure - strings not same", 5l, 5l);  
  17.       }  
  18. @Test
  19. public void testAssertFalse() {  
  20.         org.junit.Assert.assertFalse("failure - should be false", false);  
  21.       }  
  22. @Test
  23. public void testAssertNotNull() {  
  24.         org.junit.Assert.assertNotNull("should not be null", new Object());  
  25.       }  
  26. @Test
  27. public void testAssertNotSame() {  
  28.         org.junit.Assert.assertNotSame("should not be same Object", new Object(), new Object());  
  29.       }  
  30. @Test
  31. public void testAssertNull() {  
  32.         org.junit.Assert.assertNull("should be null", null);  
  33.       }  
  34. @Test
  35. public void testAssertSame() {  
  36.         Integer aNumber = Integer.valueOf(768);  
  37.         org.junit.Assert.assertSame("should be same", aNumber, aNumber);  
  38.       }  
  39. // JUnit Matchers assertThat
  40. @Test
  41. public void testAssertThatBothContainsString() {  
  42.         org.junit.Assert.assertThat("albumen", both(containsString("a")).and(containsString("b")));  
  43.       }  
  44. @Test
  45. public void testAssertThathasItemsContainsString() {  
  46.         org.junit.Assert.assertThat(Arrays.asList("one", "two", "three"), hasItems("one", "three"));  
  47.       }  
  48. @Test
  49. public void testAssertThatEveryItemContainsString() {  
  50.         org.junit.Assert.assertThat(Arrays.asList(new String[] { "fun", "ban", "net" }), everyItem(containsString("n")));  
  51.       }  
  52. // Core Hamcrest Matchers with assertThat
  53. @Test
  54. public void testAssertThatHamcrestCoreMatchers() {  
  55.         assertThat("good", allOf(equalTo("good"), startsWith("good")));  
  56.         assertThat("good", not(allOf(equalTo("bad"), equalTo("good"))));  
  57.         assertThat("good", anyOf(equalTo("bad"), equalTo("good")));  
  58.         assertThat(7, not(CombinableMatcher.<Integer> either(equalTo(3)).or(equalTo(4))));  
  59.         assertThat(new Object(), not(sameInstance(new Object())));  
  60.       }  
  61. }  

三、核心——注解

1. 说明

@Before

初始化方法

@After

释放资源

@Test

测试方法,在这里可以测试期望异常和超时时间

@Ignore

忽略的测试方法

@BeforeClass

针对所有测试,只执行一次,且必须为static void

@AfterClass

针对所有测试,只执行一次,且必须为static void

@RunWith

指定测试类使用某个运行器

@Parameters

指定测试类的测试数据集合

@Rule

允许灵活添加或重新定义测试类中的每个测试方法的行为

@FixMethodOrder

指定测试方法的执行顺序

2. 执行顺序

一个测试类单元测试的执行顺序为:

@BeforeClass –> @Before –> @Test –> @After –> @AfterClass

每一个测试方法的调用顺序为:

@Before –> @Test –> @After

3. 示例

[java] view plain copy

  1. package test;  
  2. import static org.junit.Assert.*;  
  3. import org.junit.*;  
  4. public class JDemoTest {  
  5. @BeforeClass
  6. public static void setUpBeforeClass() throws Exception {  
  7.         System.out.println("in BeforeClass================");  
  8.     }  
  9. @AfterClass
  10. public static void tearDownAfterClass() throws Exception {  
  11.         System.out.println("in AfterClass=================");  
  12.     }  
  13. @Before
  14. public void before() {  
  15.         System.out.println("in Before");  
  16.     }  
  17. @After
  18. public void after() {  
  19.         System.out.println("in After");  
  20.     }  
  21. @Test(timeout = 10000)  
  22. public void testadd() {  
  23.         JDemo a = new JDemo();  
  24.         assertEquals(6, a.add(3, 3));  
  25.         System.out.println("in Test ----Add");  
  26.     }  
  27. @Test
  28. public void testdivision() {  
  29.         JDemo a = new JDemo();  
  30.         assertEquals(3, a.division(6, 2));  
  31.         System.out.println("in Test ----Division");  
  32.     }  
  33. @Ignore
  34. @Test
  35. public void test_ignore() {  
  36.         JDemo a = new JDemo();  
  37.         assertEquals(6, a.add(1, 5));  
  38.         System.out.println("in test_ignore");  
  39.     }  
  40. @Test
  41. public void teest_fail() {  
  42.         fail();  
  43.     }  
  44. }  
  45. class JDemo extends Thread {  
  46. int result;  
  47. public int add(int a, int b) {  
  48. try {  
  49.             sleep(1000);  
  50.             result = a + b;  
  51.         } catch (InterruptedException e) {  
  52.         }  
  53. return result;  
  54.     }  
  55. public int division(int a, int b) {  
  56. return result = a / b;  
  57.     }  
  58. }  

执行结果:

[plain] view plain copy

  1. in BeforeClass================  
  2. in Before  
  3. in Test ----Add  
  4. in After  
  5. in Before  
  6. in Test ----Division  
  7. in After  
  8. in AfterClass=================  

图中左上红框中部分表示Junit运行结果,5个成功(1个忽略),1个错误,1个失败。(注意错误和失败不是一回事,错误说明代码有错误,而失败表示该测试方法测试失败)

左下红框中则表示出了各个测试方法的运行状态,可以看到成功、错误、失败、失败各自的图标是不一样的,还可以看到运行时间。

右边部分则是异常堆栈,可查看异常信息。

下篇中我们给出更多示例还继续介绍Junit

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

Flink DataSet编程指南-demo演示及注意事项

Flink中的DataStream程序是对数据流进行转换的常规程序(例如,过滤,更新状态,定义窗口,聚合)。数据流的最初的源可以从各种来源(例如,消息队列,套接...

5.2K120
来自专栏Java Web

Java 面试知识点解析(四)——版本特性篇

16350
来自专栏圣杰的专栏

线程安全知多少

1. 如何定义线程安全 线程安全,拆开来看: 线程:指多线程的应用场景下。 安全:指数据安全。 多线程就不用过多介绍了,相关类型集中在System.Thread...

35850
来自专栏向治洪

ES7、ES8新特性

概述 JavaScript,作为一门处于高速发展期的开发语言,正在变的越来越完善、稳定。我们必须拥抱这些变化,并且我们需要把ES8加入到我们的技术栈中。 E...

1.9K50
来自专栏静晴轩

lua表排序

Lua作为一种很强大且轻量级脚本语言的存在,对于掌握其几乎无所不能的Table(其实就是一个Key Value的数据结构,它很像Javascript中的Obje...

553110
来自专栏difcareer的技术笔记

JNI实现源码分析【四 函数调用】正文0x01:dvmCallMethodV0x02:nativeFunc0x03: 何时赋值

有了前面的铺垫,终于可以说说虚拟机是如何调用JNI方法的了。JNI方法,对应Java中的native方法,所以我们跟踪对Native方法的处理即可。

12440
来自专栏向治洪

ES7和ES8新特性介绍

概述 JavaScript,作为一门处于高速发展期的开发语言,正在变的越来越完善、稳定。我们必须拥抱这些变化,并且我们需要把ES8加入到我们的技术栈中。 ECM...

73660
来自专栏Golang语言社区

动手实现一个JSON验证器(上)

分析 既然要验证JSON的有效性,那么必然需要清楚的知道JSON格式,这个在JSON官网已经给我们画出来了: ? ? ? ? ? 从官方的图上面可以看出,JSO...

54970
来自专栏LeoXu的博客

NDK学习笔记(二)使用JNI同原生代码通信 原

任何使用JNI的操作都需要两次或者三次函数调用,因此要实现大量的原生方法并让它们同Java类保持同步很容易编程一件非常艰辛的工作。

10530
来自专栏進无尽的文章

编码篇-低耦合代码注入

我下面要将的内容也许网上已经有很多相关的介绍了,但是我还是会写出这篇文章,一来是对自己学习的总结,虽然总结的有些晚,如果你仔细看,会发现我的文章有别处没有的内容...

12120

扫码关注云+社区

领取腾讯云代金券