- 1. Junit单元测试www.cvicse.com讲解人:孙益飞
- 2. Junit单元测试1.单元测试的概念及意义2.单元测试的工具3. Junit简介4.如何安装Junit5.如何使用Junit
- 3. 什么是单元测试
单元测试测试的是软件最小的可执行单元的正确性,即类或方法。
单元测试通常是一段可执行代码,并能验证执行结果是否和预期相等
每个单元测试至少应该有两个测试例子( Test Case ):Negative/Positive
单元测试可以是黑盒也可以是白盒,取决于执行方法
盖房子,至少要保证每一块砖都是好的
- 4. 定义:
是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确
意义:
单元测试是其他类型测试的基础。不认真,完整的单元测试会导致其他类型测试起不到好的效果。
经过了单元测试的代码才是已完成的代码。
提交产品代码时也要同时提交测试代码。测试部门可以作一定程度的审核。
对于程序员来说,如果养成了对自己写的代码进行单元测试的习惯,不但可以写出高质量的代码,而且还能提高编程水平单元测试
- 5. 单元级测试在面向对象的开发中变得越来越重要,而一个简明易学、适用广泛、高效稳定的单元级测试框架对成功的实施测试有着至关重要的作用。在java编程环境中,Junit Framework是一个已经被多数java程序员采用和实证的优秀的测试框架。开发人员只需要按照Junit的约定编写测试代码,就可以对自己要测试的代码进行测试。
初识Junit单元测试框架
- 6. Junit单元测试JUnit是一个开源的java测试框架,它是Xuint测试体系架构的一种实现。在JUnit单元测试框架的设计时,设定了三个总体目标:
1.简化测试的编写,这种简化包括测试框架的学习和实际测试单元的编写;
2. 使测试单元保持持久性;
3. 可以利用既有的测试来编写相关的测试。
- 7. 单元测试工具目前的最流行的单元测试工具是xUnit系列框架,常用的根据语言不同分为
JUnit(java)
CppUnit(C )
DUnit (Delphi )
NUnit(.net)
PhpUnit(Php )等等。
- 8. 示例:在Eclipse中使用Junit4进行单元测试
- 9. 如何安装Junit
- 10. 第一步:将JUnit4单元测试包引入项目在该项目上点右键,点“属性”,选择“Java Build Path”,选择“Libraries”标签, 点击“Add Library…”按钮
- 11. 第二步,生成JUnit测试框架在Eclipse的Package Explorer中右点Calculate.java,
选择new -> “JUnit Test Case”
- 12. 第二步,生成JUnit测试框架在Eclipse的Package Explorer中右点Calculate.java,
选择new -> “JUnit Test Case”
- 13. JUnit测试框架效果图MyEclipse自动生成测试框架
- 14. (一)Import 测试包org.junit.* ;把junit包import进来之后,绝大部分功能就有了。
import static org.junit.Assert.*; 我们在测试的时候使用的一系列assertEquals等方法就来自这个包。
注:assertEquals是Assert类中的一系列的静态方法,一般的使用方式是Assert. assertEquals(),但是使用了静态包含后,前面的类名就可以省略了,使用起来更加的方便。
- 15. (二)测试类的声明测试类是一个独立的类,没有任何父类。测试类的名字也可以任意命名,没有任何局限性。但是建议都用类名+Test 来命名。
我们不能通过类的声明来判断它是不是一个测试类,它与普通类的区别在于它内部的方法的声明
- 16. (三)创建一个待测试的对象你要测试哪个类,那么你首先就要创建一个该类的对象。
为了测试Calculator类,我们必须创建一个calculator对象。
- 17. (四)测试方法的声明在测试类中,并不是每一个方法都是用于测试的,你必须使用“标注”来明确表明哪些是测试方法。
@Before、@Test、@Ignore 、 @After
- 18. (五)编写一个简单的测试方法使用@Test标注,以表明这是一个测试方法。
方法名字可以随便取,没有任何限制,但是规范写法是test+方法名,方法名第一个子母大写。
方法的返回值必须为void,
方法不能有任何参数。
如果违反这些规定,运行时会抛出一个异常
- 19. 我们期待的结果应该是5。
assertEquals(5, calculator.getResult());就是来判断期待结果和实际结果是否相等
第一个参数填写期待结果,第二个参数填写实际结果 。
JUnit会自动进行测试并把测试结果反馈给用户
- 20. (六)忽略测试某些尚未完成的方法加上@Ignore标注的含义就是“某些方法尚未完成,暂不参与此次测试”。
这样的话测试结果就会提示你有几个测试被忽略,而不是失败
- 21. (七)Fixture “固定代码段”@Before,@After是每个方法测试时候必然被调用的代码
保证每一个测试都是独立的,相互之间没有任何耦合度
这里不需要@Test标注,因为这不是一个test
测试开始->setUp->testXXXX->tearDown->测试结束
- 22. @BeforeClass 或 @AfterClass只在测试用例初始化时执行@BeforeClass方法,当所有测试执行完毕之后,执行@AfterClass进行收尾工作
用于测试读取文件等耗时的方法。
该方法必须是public和static的
- 23. (八)限时测试对于那些逻辑很复杂,循环嵌套比较深的程序采用限时测试
函数设定一个执行时间,超过了这个时间,他们就会被系统强行终止,并且系统还会向你汇报该函数结束的原因是因为超时
- 24. (九)测试异常expected属性用来测试函数应该抛出的异常
- 25. (十)Runner (运行器)JUnit中有一个默认Runner,如果你没有指定,那么系统自动使用默认Runner来运行你的代码
@RunWith是用来修饰类 ,可以指定需要的Runner
- 26. (十一)参数化测试可以将所有参数集中起来一起测试,步骤如下:
1:你要为这种测试专门生成一个新的类
2:定义一个待测试的类,并且定义两个变量,一个用于存放参数,一个用于存放期待的结果
3:定义测试数据的集合 ,用@Parameters标注进行修饰
4:创建构造函数对先前定义的两个参数进行初始化
- 27. (十一)参数化测试
- 28. (十二)打包测试步骤:
1:用@RunWith标注传递一个参数Suite.class。
2:用@Suite.SuiteClasses表明这个类是一个打包测试类。
3:把需要打包的类作为参数传递给该标注
- 29. 第三步:Eclipse中如何运行测试类右击测试类->Run As->JUnit Test
- 30. 第四步:测试结果(1):运行CalculatorTest
- 31. 第四步:测试结果(2):运行SquareTest
- 32. 第四步:测试结果(3):运行AllCalculatorTests两个测试类
- 33. JUnit 框架
- 34. JUnit几个核心类及接口Assert当条件成立时候assert方法保持沉默,但若条件不成立就抛出异常TestResult包含了测试中发生的所有错误或失败TestListener测试中若产生(开始,结束,错误,失败)会通知TestListenerTestCase定义了可以用于运行多项测试的环境(实现了Test接口)TestSuite运行一组test case(他们可能包含其他 test suite),它是Test的组合(实现了TestSuite)BaseTestRunner用来启动测试的用户界面,BaseTestRunner是所有test runner的超类
- 35. Assert 超类所提供的8个核心方法assertEquals()用来查看对象中存的值是否是期待的值,与字符串比较中使用的equals()方法类似;assertFalse()
assertTrue()用来查看变量是是否为false或true,如果assertFalse()查看的变量的值是false则测试成功,如果是true则失败,assertTrue()与之相反;assertSame()
assertNotSame()用来比较两个对象的引用是否相等和不相等,类似于通过“==”和“!=”比较两个对象;assertNull()
assertNotNull()用来查看对象是否为空和不为空;fail ()让测试失败,并给出制定信息。
- 36. TestCase提供了10个自己的方法countTestcases计算run(TestResult result)所执行的TestCase的数目(由Test接口规定)createResult创建默认的TestResult对象getName获得TestCase的名字run运行TestCase并收集TestResult中的结果runBare运行测试序列,但不执行任何特殊功能,比如自动发现test方法runTest重载以运行测试并断言其状态setName设置TestCase的名字setUp初始化fixturetearDown销毁fixturetoString()返回Test的字符信息
- 37. JUnit4.X 版本与以前版本的区别1.测试类不必再从junit.framework.TestCase派生了;
2.测试方法也不必再以“test”作为前缀,而是代之以@Test注解来表示;
3.作为Fixtures的setUp与tearDown也不再强制使用这两个方法名了,只要在任何方法名称前冠以@Before或@After,即可达到一样的效果;
4.对setUp/tearDown的一大改进还包括,可以限定二者只在整个test case范围内执行一次,这是通过@BeforeClass和@AfterClass注解达成的;
5.@Test 注解还可以带上timeout 参数和expected参数,前者代表测试方法超过指定时间即被认为失败,后者则声明了预期被抛出的异常类型。
- 38. www.themegallery.comwww.themegallery.comThank You !