单元测试
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JUnit 4.x vs JUnit 3.8
JUnit 4.x 无 @Before @After @Test @BeforeClass @AfterClass @SuiteClasses JUnit 3.8 extends TestCase void setUp() void tearDown() 无 无 无 static Test suite()
– 测试点的断言有问题
• Error是意料之外
– 被测试的代码有问题
Summary • Keep the bar green to keep the code clean! • 单元测试不是证明您是对的, 而是证明您没有错误!
Байду номын сангаас
假设机制(Assumption)
• 假设以免陷入万劫不复
• 假设语法简单灵活,与assertThat断言类似, 同样可以和匹配符Matcher良好结合
假设机制的优点
• 通过对 runtime 变量进行取值假设,从而不 会因为一个测试用例的不通过而导致整个 测试失败而中断(the test passes),使得 测试更加连贯 • 利用假设可以控制某个测试用例的运行时 间,让其在自己期望的时候运行(run at a given time)
• 2、@SuiteClasses({*.class}) • 3、测试类为一空类即可 • PS: 测试套件支持嵌套
反射测试
• 此测试仅针对私有方法的测试,与普通的 测试方法的区别是充分利用了Java的反射 机制,其关键点在于突破私有防线,其决 定代码如下:
– Method.setAccessible(true)
• 套件化测试 • 反射测试
参数化测试
• 1、@RunWith(Parameterized.class)注解 测试运行器 • 2、提供数据:方法形如public static Collection *(),须由@Parameters注解
套件化测试
• 1、@RunWith(Suite.class)注解测试类
JUnit 4.4+ 新特性
• 新断言(Assertion syntax): assertThat
• 假设机制(Assumption) • 理论机制(Theory)
新断言:assertThat
• JUnit 4.4引入新断言 assertThat,语法如下 所示:
– assertThat( [value], [matcher statement] )
EasyMock
• EasyMock 是一套用于通过简单的方法对 于给定的接口生成 Mock 对象的类库,它提 供对接口的模拟,能够通过录制、回放、 检查三步来完成大体的测试过程,可以验 证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。 通过 EasyMock,我们可以方便地构造 Mock 对象进行单元测试
如何使用EasyMock
• • • • • 使用 EasyMock 生成 Mock 对象 设定 Mock 对象的预期行为和输出 将 Mock 对象切换到 Replay 状态 对 Mock 对象的行为进行验证 调用 Mock 对象方法进行单元测试
Failure与Error
• Failure是情理之外
也谈单元测试
——浅析JUnit新特性及简单 整合EasyMock
JUnit简介
• JUnit是由 Erich Gamma 和 Kent Beck 编 写的一个回归测试框架(regression testing framework)
– 1、用于测试期望结果的断言(Assertion) – 2、用于共享共同测试数据的测试工具 – 3、用于方便的组织和运行测试的测试套件 – 4、图形和文本的测试运行器
假设示例
• assumeThat( i, is(10) )
• assumeThat( System.getProperty( ―ENV" ), nullValue() )
• assumeThat(File.separatorChar, is('/'))
理论机制(Theory)
• 发轫于TDD(Test-driven development) , 青出于蓝而青于蓝 • 描述原始系统定义,为后续回归测试提供 大量回归测试用例(regression test case) • 便于开发抽象接口 • 更容易发现潜在的bug
注解生辉
• • • • • • @Test(expected / timeout) @Ignore(―感觉不爽,不想测!‖) @RunWith(*.class) @SuiteClasses({*.class}) @Prameters @Theory
Don’t Repeat Yourself
• 参数化测试
• JUnit 4.4引入了测试框架HamCrest中的通 用匹配符Matcher • 简洁的assertThat和功能丰富的Matcher的 结合展现出良好的可读性和强大的功能
新断言及匹配符示例
• assertThat(str, anng(―sina"))); • assertThat(str, not(equalTo("hello"))); • assertThat( number, anything() ); • assertThat( double, closeTo( 20.0, 0.5 ) ); • assertThat(map,hasEntry("key", "value"));