我搜索了网站和一些文献,但无法得到明确的答案。我正在尝试学习单元测试,同时构建一个新的网页,它只是作为白板,你可以添加post-it。
我有一个代表白板的Canvas对象,以及一个代表post-it的票对象。我有(现在)全局函数来检索唯一的画布,我测试如下:
this.testRetrieveCanvas = function()
{
var canvas = getCanvas();
this.assertTrue( canvas != null );
}
this.testCanvasType = function()
{
var canvas = getCanvas();
this.assertTrue( canvas instanceof Canvas );
}
this.testIfCanvasIsReused = function()
{
var canvas = getCanvas();
this.assertEquals( canvas, getCanvas() );
}
所以,我测试了三件事:
到目前为止没有问题。但是稍后,我正在测试“将票证添加到画布”:
this.testAddTicketToCanvas = function()
{
var ticket = factory.createTicket("yellow");
var canvas = getCanvas();
canvas.addTicket( ticket );
this.assertTrue( canvas.contains( ticket ) );
};
如您所见,我在我的测试中使用了getCanvas()函数。这是一个依赖测试吗?我的意思是,前三个测试必须通过,如果我希望这个测试能够毫无疑问地运行。如果它是依赖的,我将如何解决这个问题?
答案 0 :(得分:0)
严格地说,你应该覆盖getCanvas()来返回一个预构造的(即原始构造函数不被调用)canvas的部分模拟。话虽如此,如果canvas的构造函数是一个空函数而且getCanvas方法没有涉及业务逻辑,那么你应该没有问题。
我会更加警惕最后两个一起使用的陈述。 canvas.addTicket( ticket );
没问题,因为它是被测试的功能。但是你断言你已经使用同一个对象的方法添加了故障单。如果此方法尚未实现,或返回false,或更糟,该怎么办?如果您的addTicket方法具有辅助效果,可以使它将票证添加到列表但更改使contains()
抛出异常,或返回false或true的标志,该怎么办?如果包含某些业务逻辑会使其为您发送的票证返回false,但对于生产环境中的相同票证是正确的(即您的测试票证未正确初始化,缺少状态,已标记为已排除)从环境的业务流程来看,如果现在没有逻辑,但是在项目进行两个月之后,逻辑会发生变化,以便您的测试失败但其他所有工作都会正常工作(添加新状态,没有此状态的对象被视为不存在,客户a,b和c除外。我可以继续。
我的观点是没有我们无法专门回答你的问题的代码,只给你指针和上面的一般答案。如果你真的不想发布代码,那么考虑所有这些场景,以及你能想到的所有其他场景,如果在这些情况下测试你的代码,这种方式不会破坏代码,也不会破坏现在和在可预见的未来,那你没事。
答案 1 :(得分:0)