测试驱动开发的读书笔记(三)
Mock object(模拟对象):
mock的特点:
1、提供和被模拟对象相同的接口
2、会检查每个调用的上下文
以下几种情况可以考虑创建Mock
1、当被模拟的对象提供不确定的结果时(例如:当前时间或当前温度)
2、很难创建或重现的状态(例如:网络错误)
3、很慢(例如:数据库,需要在测试前初始化)
4、还不存在或者也许会改变的行为
5、为了测试想提过一些额外的信息和方法时
当测试一个依赖于昂贵且复杂的资源的对象时,可尝试创建一个这些资源的模拟版本。
mock对象鼓励你仔细思考各个对象的可见性,减少设计中的耦合,也给项目增加风险:模拟对象需要和现实对象的行为一样,因而是需要对模拟对象的行为进行测试的。
Fixture(固定设施):
是指多个测试需要的通用对象(也被称为脚手架)
例子:
EmptyRectangleTest
public void testEmpty()
{
Rectangle empty = new Rectangle(0,0,0,0);
assertTrue(empty.isEmpty());
}
public void testWidth()
{
Rectangle empty = new Rectangle(0,0,0,0);
assertTrue(0.0, empty.getWidth(), 0.0);
}
改成
EmptyRectangleTest
private Rectangle empty;
public void SetUp()
{
Rectangle empty = new Rectangle(0,0,0,0);
}
public void testEmpty()
{
assertTrue(empty.isEmpty());
}
public void testWidth()
{
assertTrue(0.0, empty.getWidth(), 0.0);
}
问题:
里面提到如何测试不大可能被调用到的错误代码,一种是单元测试,需要嵌套到代码中;另一种是不是可以考虑通过性能测试来触发(估计触发也很有限)
观点记录:
“希望使用白盒测试不是一种测试问题,而是一种设计问题。每当我想使用一个变量作为检验代码是否运行正确的一种方法时,我就会获得了改进设计的机会”
相关链接:
测试驱动开发的读书笔记(一):http://www.cnblogs.com/xwj-pandababy/articles/2128880.html
测试驱动开发的读书笔记(二):http://www.cnblogs.com/xwj-pandababy/articles/2130958.html
测试驱动开发的读书笔记(三):http://www.cnblogs.com/xwj-pandababy/articles/2133841.html
测试驱动开发的读书笔记(四):http://www.cnblogs.com/xwj-pandababy/articles/2133929.html
测试驱动开发的读书笔记(五):http://www.cnblogs.com/xwj-pandababy/articles/2134644.html