知识点——断言

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

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. 示例

  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. 示例

  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. }

执行结果:

  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使用第一弹的更多相关文章

  1. 我的长大app开发教程第一弹:Fragment布局

    在接下来的一段时间里我会发布一个相对连续的Android教程,这个教程会讲述我是如何从零开始开发“我的长大”这个Android应用. 在开始之前,我先来介绍一下“我的长大”:这是一个校园社交app,准 ...

  2. typecho流程原理和插件机制浅析(第一弹)

    typecho流程原理和插件机制浅析(第一弹) 兜兜 393 2014年03月28日 发布 推荐 5 推荐 收藏 24 收藏,3.5k 浏览 虽然新版本0.9在多次跳票后终于发布了,在漫长的等待里始终 ...

  3. Hadoop基础-MapReduce的工作原理第一弹

    Hadoop基础-MapReduce的工作原理第一弹 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在本篇博客中,我们将深入学习Hadoop中的MapReduce工作机制,这些知识 ...

  4. Java基础-程序流程控制第一弹(分支结构/选择结构)

    Java基础-程序流程控制第一弹(分支结构/选择结构) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.if语句 1>.if语句的第一种格式 if(条件表达式){ 语句体: ...

  5. RMQ_第一弹_Sparse Table

    title: RMQ_第一弹_Sparse Table date: 2018-09-21 21:33:45 tags: acm RMQ ST dp 数据结构 算法 categories: ACM 概述 ...

  6. codechef 营养题 第一弹

    第一弾が始まる! 定期更新しない! 来源:http://wenku.baidu.com/link?url=XOJLwfgMsZp_9nhAK15591XFRgZl7f7_x7wtZ5_3T2peHh5 ...

  7. 好玩的WPF第一弹:窗口抖动+边框阴影效果+倒计时显示文字

    原文:好玩的WPF第一弹:窗口抖动+边框阴影效果+倒计时显示文字 版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csd ...

  8. [Git] 002 初识 Git 与 GitHub 之加入文件 第一弹

    在 GitHub 的 UI 界面使用 Git 往仓库里加文件 第一弹 1. 点击右上方的 Create new file 2. 在左上方填入文件名,若有后缀,记得加上 3. 页面跳转,此时已有两个文件 ...

  9. [Markdown] 03 进阶语法 第一弹

    目录 1. YMAL 题头 2. 缩写 3. 强调 4. 自定义 <div> 标签 5. <cite> 标签 5. <code> 与 <br> 标签 6 ...

随机推荐

  1. 【转载】Java 集合详解

    转载:https://www.cnblogs.com/ysocean/p/6555373.html 一.集合的由来 通常,我们的程序需要根据程序运行时才知道创建多少个对象.但若非程序运行,程序开发阶段 ...

  2. 【第二课】kaggle案例分析二

    Evernote Export 推荐系统比赛(常见比赛) 推荐系统分类 最能变现的机器学习应用 基于应用领域分类:电子商务推荐,社交好友推荐,搜索引擎推荐,信息内容推荐等 **基于设计思想:**基于协 ...

  3. laravel中ubuntu下执行php artisan migrate总是报错

    ubuntu14.0 + xampp + laravel5下 laravel中ubuntu下执行php artisan migrate总是报错: [PDOException] could not fi ...

  4. 通过分析反汇编还原 C 语言 if…else 结构

    让我们从反汇编的角度去分析并还原 C 语言的 if - else 结构,首先我们不看源代码,我们用 OllyDBG 载入 PE 文件,定位到 main 函数领空,如下图所示. 在图示中,我已经做好了关 ...

  5. Noip 2013 练习

    转圈游戏 传送门 Solution 快速幂 Code //By Menteur_Hxy #include <cstdio> #include <cstdlib> #includ ...

  6. 2.6、Flask扩展

    Flask 被设计为可扩展形式,故而没有提供一些重要的功能,例如数据库和用户认证,所以开发者可以自由选择最适合程序的包,或者按需求自行开发. 社区成员开发了大量不同用途的扩展,如果这还不能满足需求,你 ...

  7. NLTK学习笔记(二):文本、语料资源和WordNet汇总

    目录 语料库基本函数表 文本语料库分类 常见语料库及其用法 载入自定义语料库 词典资源 停用词语料库 WordNet面向语义的英语字典 语义相似度 语料库基本函数表 示例 描述 fileids() 语 ...

  8. 【codeforces 793C】Mice problem

    [题目链接]:http://codeforces.com/contest/793/problem/C [题意] 给你每个点x轴移动速度,y轴移动速度; 问你有没有某个时刻,所有的点都"严格& ...

  9. POJ 2002 Squares【值得摸索的一道二分+点旋转】

    id=2002">Squares 很好的一道二分,事实上本来我是没有思路的,看了基神的题解之后才似乎明确了点. 题意:给出最多有1000个点,问这些点能够组成多少个正方形 分析:先想想 ...

  10. linux程序设计——多线程(第十二章)

    12.8    多线程 之前,总是让程序的主线程只创建一个线程.这节将演示怎样在同一个程序中创建多个线程,然后怎样以不同于其启动顺序将它们合并在一起.此外,还演示多线程编程时easy出现的时序问题. ...