清单 假设机制优点 举例
@Test
//测试用例函数veryLongTest()执行需要很长时间所以开发人员不是每次都想运行它可以通过判断是否定义了
//DEV环境变量来选择性地执行该测试用例
public void veryLongTest() throws Exception {
//假设环境变量DEV为空即如果之前通过SystemsetProperty定义过DEV环境变量(不为空)则自动跳过
//veryLongTest中假设后剩下的语句去执行下一个JUnit测试用例否则执行假设后接下来的语句
assumeThat( SystemgetProperty( DEV ) nullValue() );
Systemoutprintln(running a long test);
Threadsleep( * );
}
如何使用 Assumption 假设机制
开发人员可以使用 assumeThat 并配合 hamcrest 的匹配符 Matcher对即将被传入到单元测试用例函数中的 runtime 变量值做精确的假设如果假设不正确(即当前 runtime 变量的取值不满足所假设的条件)则不会将该变量传给该测试用例中假设后面的语句即程序会从该 assumeThat 所在的 @Test 测试函数中直接自动跳出(test automatically quietly passesvalues that violate assumptions are quietly ignored)去执行下一个 @Test 函数使得本来会中断的测试现在不会中断
使用假设机制必须得注意以下几点
由于 JUnit 引用了 Hamcrest 匹配符库所以使用 assumeThat 就可以编写所有的假设语句但是为了方便使用JUnit 除 assumeThat 之外还提供了 assumeTrueassumeNotNull 和 assumeNoException 语句 要使用 assume* 假设语句必须得 import static orgjunitAssume*; 如果引用了第三方 hamcrest 的匹配符库必须得 import static orghamcrestMatchers*;如果引用 JUnit 自带的匹配符库需要 import static orghamcrestCoreMatchers*;
清单 假设机制使用举例
例
@Test
public void filenameIncludesString() {
//如果文件分隔符不是/(forward slash)则不执行assertThat断言测试直接跳过该测试用例函数
assumeThat(FileseparatorChar is(/));
//判断文件名fileName是否含有字符串developerWorks
assertThat( fileName containsString( developerWorks ) );
}
例
@Test
public void filenameIncludesString() {
//bugFixed不是JUnit的函数是开发人员自己工程中定义的函数表示判断指定的defect是否
//被修正了如果被修正则返回true否则返回false这里假设缺陷被修正后才进行余下单元测试
assumeTrue( bugFixed() );
//判断文件名fileName是否含有字符串developerWorks
assertThat( fileName containsString( developerWorks ) );
}
理论机制(Theory)
为什么要引用理论机制(Theory)
当今软件开发中测试驱动开发(TDD — Testdriven development)越发流行为什么 TDD 会如此流行呢?因为它确实拥有很多优点它允许开发人员通过简单的例子来指定和表明他们代码的行为意图
[] [] [] [] [] [] [] []