【发布时间】:2013-10-06 14:56:52
【问题描述】:
我已经搜索了该网站和一些文献,但无法得到明确的答案。我正在尝试学习单元测试,同时构建一个简单地用作白板的新网页,您可以在其中添加便利贴。
我有一个代表白板的 Canvas 对象和一个代表便利贴的票证对象。我有(目前)全局函数来检索唯一的画布,我像这样测试它:
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() 函数。现在这是一个依赖测试吗?我的意思是,如果我希望这个测试能够毫无疑问地运行,前三个测试必须通过。如果它是依赖的,我将如何解决这个问题?
【问题讨论】:
-
没有其他代码我帮不上什么忙,但你应该看看chaijs.com/api/bdd (chai)、sinonjs.org (sinon) 或 gofreerange.com/mocha/docs (mocha)介绍 javascript 中的模拟。
-
我不确定您需要什么额外的代码来回答我的问题。也许我会改写:我是否违反了单元测试规则,使我的第四个单元测试依赖于前三个?
-
@DavidMaes 需要更多信息。你用的是什么测试框架?即您是否编写了“assertTrue”方法(如果是的话,您可以包含源代码吗?)或者您是从库中使用它吗?你也可以请包括“getCanvas()”的代码,因为这也是回答你的问题所需要的。
-
我不同意,我已经提供了您需要的所有信息。该框架是无关紧要的,因为我在问一个一般的单元测试问题。我将再次改写:“你可以在单元测试中使用你在其他单元测试中测试过的功能吗?这是一个依赖项吗?”和“如果它是依赖项,你为什么以及如何规避这些类型的情况”?
标签: javascript unit-testing testing tdd