1.JUnit的各种断言:
assertEquals([String message], expected, actual)
用得最多的断言形式。message参数可以选。
assertNull([String message], java.lang.Object object)
assertNotNull([String message], java.lang.Object object)
验证一个给定的对象是否为null。message参数可以选。
assertSame([String message], expected, actual)
assertNotSame([String message], expected, actual)
验证expected参数和actual参数所引用的,是否为同一个对象。message参数可以选。
assertTrue([String message], boolean condition)
assertFalse([String message], boolean condition)
验证给定的二元条件是否为真。message参数可以选。
fail([String message])
这个断言将会使测试立即失败。message参数可以选。
2.当一个断言失败的时候,该测试方法将会被中止。
当有测试失败的时候,无论如何都不能给原有代码再添加新的特性,此时应该尽快修复这个错误,直到让所有的测试顺利通过。
3.代码的执行顺序:
oneTimeSetUp()
setUp()
testMethod1()
tearDown()
setUp()
testMethod2()
tearDown()
oneTimeTearDown()
假设对于每个测试,你都需要某种数据库连接。这时,你就不需要在每个测试方法中重复建立和释放连接了。
而只需要在setUp和tearDown方法中分别建立和释放连接:
public class TestDB extends TestCase{
private Connection dbConn;
protected void setUp(){
dbConn = new Connection("oracle", 1521, "liam", "huang");
dbConn.connect();
}
protected void tearDown(){
dbConn.disconnect();
dbConn = null;
}
public void testAccountAccess(){
//uses dbConn
}
public void testEmployeeAccess(){
//uses dbConn
}
}
4.测试那些内容:
Right-BICEP
Right-结果是否正确
B-是否所有的边界条件都是正确的
I-能查一下反向关联吗
C-能用其他手段交叉检查一下结果吗
E-你是否可以强制错误条件发送
P-是否满足性能要求
5.CORRECT边界条件:
Conformance-一致性 值是否符合预期的格式
Ordering-有序性 组值是该有序的,还是该无序的
Range-区间性 值是否在一个合理的最大值和最小值的范围内
Reference-耦合性 代码是否引用了一些不受代码本身直接控制的外部因素
Existence-存在性 值是否存在
Cardinality-基数性 是否恰好有足够的值
Time-时间性 所有事情是否都是按顺序发生的,是否在正确的时间,是否及时
6.Mock对象:
在单元测试中我们也要使用类似于电影中灯光替身一类的替代品。
一种和真品非常接近的赝品,至少表面上看来是这样,但是就我们测试的目的而言它更加好用。
Mock对象,也就是真实对象在调试期的替代品。
在使用mock对象进行测试的时候,总共有3个关键步骤:
1)使用一个接口来描述这个对象
2)为产品代码实现这个接口
3)以测试为目的,在mock对象中实现这个接口
Mock伪装出真实世界的某些部分,使你可以集中精力测试好自己编写的代码。
7.好的测试品质:
A-TRIP
Automatic 自动化
Thorough 彻底的
Repeatable 可重复
Independent 独立的
Professional 专业的