单元测试(junit testing),是指对软件中的最小可测试单元进行检查和验证。Java里单元指一个类。

JUnit ,是一个开源的Java单元测试框架,是 Java的标准单元测试库,是非常重要第三方 Java 库,由 Kent Beck 和 Erich Gamma 开发。

Junit作为一个软件测试的工具,JUnit可以不破坏java原代码,使用方便,添加快捷,代码量少,可视化的测试。

JUnit单元测试步骤:

1.导入包junit测试包:JUnit测试版本,3.81版,4.0版,导入对应的jar包;

2.写一个类扩展(继承)TestCase;
3.在需要测试的方法名前加test生成新的测试方法;
4.运行测试,用断言(assert***)的方法测试成功(显示绿色)或失败(显示红色),或者自己判断结果正确与否。

Unit3.81与JUnit4.0区别:
1.在 JUnit 4 中,测试是由 @Test 注释来识别的;
2.Unit 3.81 测试运行程序时会在运行每个测试之前自动调用 setUp() 方法,在JUnit4.0中,要用 @Before 注释;
3.在 JUnit 3.81 中,测试运行程序时会在运行每个测试之前自动使用 tearDown() 方法清除消耗的资源,在JUnit4.0中,用 @After 注释。

注意:如果需测试的方法没有返回值,只能测试其过程。

JUnit4新特性:
1.属于类范围的 setUp()方法 和 tearDown() 方法,任何用 @BeforeClass 注释的方法都将在该类中的测试方法运行之前运行一次,而任何用 @AfterClass 注释的方法都将在该类中的所有测试都运行之后运行一次;
2.异常测试:编写抛出异常的代码,并使用注释来声明该异常是预期的;
3.在需要高效率的测试中,有些代码测试你认为可以跳过,这类测试可以被注释为 @Ignore

4.时间测试可以用超时参数来注释,如果测试的运行时间超过指定的毫秒数,测试失败。

5.增加两个新的断言方法:

(1)public static void assertEquals(Object[] expected, Object[] actual)
(2)public static void assertEquals(String message, Object[] expected, Object[] actual) 这两个方法用来比较数组:如果数组长度相等且对应的元素相同,则这两个数组相等,否则不等,也考虑了数组为空的情况。

首先创建一个Java工程,在工程中创建一个被单元测试的Student数据类

  1. package com.phicomme.hu;
  2.  
  3. public class Student
  4. {
  5.  
  6. private String name;
  7. private String sex;
  8. private int high;
  9. private int age;
  10. private String school;
  11.  
  12. public Student(String name, String sex ,int high, int age, String school)
  13. {
  14. this.name = name;
  15. this.sex = sex;
  16. this.high = high;
  17. this.age = age;
  18. this.school = school;
  19. }
  20. public String getName()
  21. {
  22. return name;
  23. }
  24. public void setName(String name)
  25. {
  26. this.name = name;
  27. }
  28. public String getSex()
  29. {
  30. return sex;
  31. }
  32. public void setSex(String sex)
  33. {
  34. this.sex = sex;
  35. }
  36. public int getHigh()
  37. {
  38. return high;
  39. }
  40. public void setHigh(int high)
  41. {
  42. this.high = high;
  43. }
  44. public int getAge()
  45. {
  46. return age;
  47. }
  48. public boolean setAge(int age)
  49. {
  50. if (age >25)
  51. {
  52. return false;
  53. }
  54. else
  55. {
  56. this.age = age;
  57. return true;
  58. }
  59. }
  60.  
  61. public String getSchool()
  62. {
  63. return school;
  64. }
  65. public void setSchool(String school)
  66. {
  67. this.school = school;
  68. }
  69.  
  70. }

示例

在eclipse下单元测试这个类:

首先导入Junit包:选中java工程,点击鼠标右键--->选择properties---->在窗口中选JavaBuild Path---->在右侧点击Add Library---->在弹出的窗口列表中选中Junit---->下一步----->Junit 4(我用的是Junit 4)---->finish

这样Junit 4包就导完了,接下来就是创建测试类:

将测试类和被测试类放在不同的包中(也可以放在同一个包中,此处只是为了区别),代码如下:

测试类1:

  1. package com.phicomme.test;
  2.  
  3. import com.phicomme.hu.Student;
  4.  
  5. import junit.framework.TestCase;
  6.  
  7. public class StudentTest01 extends TestCase
  8. {
  9.  
  10. Student testStudent;
  11. //此方法在执行每一个测试方法之前(测试用例)之前调用
  12. @Override
  13. protected void setUp() throws Exception
  14. {
  15. // TODO Auto-generated method stub
  16. super.setUp();
  17. testStudent = new Student("djm", "boy", 178, 24, "华东政法");
  18. System.out.println("setUp()");
  19. }
  20.  
  21. //此方法在执行每一个测试方法之后调用
  22. @Override
  23. protected void tearDown() throws Exception
  24. {
  25. // TODO Auto-generated method stub
  26. super.tearDown();
  27. System.out.println("tearDown()");
  28. }
  29.  
  30. //测试用例,测试Person对象的getSex()方法
  31. public void testGetSex()
  32. {
  33. assertEquals("boy", testStudent.getSex());
  34. System.out.println("testGetSex()");
  35. }
  36.  
  37. //测试Person对象的getAge()方法
  38. public void testGetAge()
  39. {
  40. assertEquals(24, testStudent.getAge());
  41. System.out.println("testGetAge()");
  42. }
  43. }

示例

测试类2:

  1. package com.phicomme.test;
  2.  
  3. import junit.framework.TestCase;
  4.  
  5. import com.phicomme.hu.Student;
  6.  
  7. public class StudentTest extends TestCase
  8. {
  9.  
  10. private Student testStudent;
  11.  
  12. @Override
  13. protected void setUp() throws Exception
  14. {
  15. // TODO Auto-generated method stub
  16. super.setUp();
  17. testStudent = new Student("steven_hu", "boy", 170 , 23, "上海理工");
  18. }
  19.  
  20. @Override
  21. protected void tearDown() throws Exception
  22. {
  23. // TODO Auto-generated method stub
  24. super.tearDown();
  25. }
  26.  
  27. public void testSetage()
  28. {
  29. assertTrue(testStudent.setAge(21));
  30. }
  31.  
  32. public void testGetSchool()
  33. {
  34. //预期值和实际值不一样,测试时出现失败(Failure)
  35. assertEquals("南昌大学", testStudent.getSchool());
  36. }
  37.  
  38. public void testGetName()
  39. {
  40. assertEquals("hdy", testStudent.getName());
  41. }
  42. }

示例

当然,如果同时需要一起测试以上这两个测试类,可以通过TestSuite类实现,它相当于是一个套件,可以把所有测试类添进来一起运行测试。

  1. package com.phicomme.test;
  2.  
  3. import com.phicomme.hu.StudentTest02;
  4.  
  5. import junit.framework.Test;
  6. import junit.framework.TestSuite;
  7.  
  8. public class AllTest
  9. {
  10.  
  11. //static PersonTest p = new PersonTest();
  12. //static PersonTest p1 = new PersonTest();
  13. public static Test suite()
  14. {
  15. TestSuite suite = new TestSuite("Test for com.phicomme.test");
  16. //suite.addTest(p);
  17. //suite.addTest(p1);
  18. suite.addTestSuite(StudentTest.class);
  19. suite.addTestSuite(StudentTest01.class);
  20. return suite;
  21.  
  22. }
  23. }

示例

最后,分别测试以上三个类(选中需要测试的类---->鼠标右键---->Run As---->Junit Test):

StudentTest类的测试结果图:

StudentTest01类的测试结果图:

AllTest类的测试结果图:

Juint 单元测试(2)的更多相关文章

  1. 0329 复利计算器5.0 Juint单元测试 组员 254列志华 253韩麒麟

    一.主要功能与需求分析 1.本金为100万,利率或者投资回报率为3%,投资年限为30年,那么,30年后所获得的利息收入:按复利计算公式来计算就是:1,000,000×(1+3%)^30 2.如果按照单 ...

  2. Juint单元测试

    ********************************************************************************************* 单元测试:集 ...

  3. Juint 单元测试(1)

    Junit 是一个基于Java语言的回归单元测试框架.是白盒测试的一种技术,记住这些就可以了. 为项目添加Junit 1 右键项目名称选择“Properties”,在弹出的窗体中选择“Java Bui ...

  4. Java基础13-字符串缓冲流;字节流

    作业解析 描述HashMap内部实现原理 HashMap是一种存储机制,存储的是key-value对,key用来保证元素的唯一性.通过hash算法将要存储的对象打散,分布在不同的区间中. 当添加对象时 ...

  5. 白盒测试实践-任务进度-Day02

    所使用静态代码检查工具 阿里巴巴Java开发代码检测IDE插件 小组成员 华同学.郭同学.覃同学.刘同学.穆同学.沈同学 任务进度 在经过任务分配阶段后,大家都投入到了各自的任务中,以下是大家今天任务 ...

  6. SSH框架之Spring第二篇

    1.1 基于注解的IOC配置 既注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合.只是配置的形式不一样. 1.2 环境搭建 1.2.1 第一步:拷贝必备的jar包 需要多拷贝一个sp ...

  7. Java--调试--单步调试,断言,单元测试

    单步调试:主要查看变量内容的变化    1.设置断点位置,设置在可能出现问题的代码 2.以Debug as方式运行 程序 3.F5 --> step into 进入方法内部进行调试    F6 ...

  8. Spring之单元测试

    引言 是否在程序运行时使用单元测试是衡量一个程序员素质的一个重要指标.使用单元测试既可以让我检查程序逻辑的正确性还可以让我们减少程序测试的BUG,便于调试可以提高我们写程序的效率.以前我们做单元测试的 ...

  9. java juint框架的windows自动化-自动运行juint程序简述

    在京东混了一个月,基本有点稳定了,觉得也有所余力了现在,继续写博客吧,不过以后更新也许不是那么频繁了 本人使用的是juint框架,对开发是一个单元测试的java框架,但是对测试而言是java的基石之一 ...

随机推荐

  1. django重写用户模型

    重写一个UserProfile继承自带的AbstractUser # -*- coding: utf-8 -*- from __future__ import unicode_literals fro ...

  2. 子元素绝对定位absolute后,自动撑开宽度

    position: absolute;   white-space: nowrap;

  3. java实现简单邮件的发送以及常见问题

    java实现简单邮件的发送以及常见问题 最近遇到个需求需要实现发送邮件的功能,以前做发送邮件功能都是有邮箱用户名密码,通过用户名密码连接对应的SMTP服务器来实现邮件的发送.但是这次用公司内部的邮箱, ...

  4. Top 10 Uses For A Message Queue

    We’ve been working with, building, and evangelising message queues for the last year, and it’s no se ...

  5. python selenium firefox使用

    演示的版本信息如下: Python 3.6.0 Selenium  3.5.0 Firefox 55.0.3 geckodriver v1.0.18.0 win64 1.前提准备 1.1 安装pyth ...

  6. Dubbo之RPC架构

    为什么会有dubbo的出现: 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当 ...

  7. jQuery时间轴鼠标悬停动画

    在线演示 本地下载

  8. 正式学习React(四) ----Redux源码分析

    今天看了下Redux的源码,竟然出奇的简单,好吧.简单翻译做下笔记: 喜欢的同学自己可以去github上看:点这里 createStore.js import isPlainObject from ' ...

  9. MyEclipse/Eclipse中properties文件中文乱码问题解决

    有时候在myeclipse或者eclipse中打开properties文件时会发现其中的中文都是乱码.这是由于当前的properties文件编码格式不支持汉字造成的.当这种情况发生时,我们可以按照以下 ...

  10. 解析JDK动态代理实现原理

    JDK动态代理使用实例 代理模式的类图如上.关于静态代理的示例网上有很多,在这里就不讲了. 因为本篇讲述要点是JDK动态代理的实现原理,直接从JDK动态代理实例开始. 首先是Subject接口类. p ...