WEB开发网
开发学院网页设计JavaScript 使用JsUnit和JSMock的JavaScript测试驱动开发 阅读

使用JsUnit和JSMock的JavaScript测试驱动开发

 2010-09-14 13:44:54 来源:WEB开发网   
核心提示: 让我们往老虎机里放一些钱,在这个场景下,使用JsUnit和JSMock的JavaScript测试驱动开发(6),老虎机异步调用服务器端以返回用户余额,这很有挑战性,这个测试的目的不是在给了一定状态之后,验证被测系统的行为,因为单元测试中没有网络,AJAX调用会失败

让我们往老虎机里放一些钱。在这个场景下,老虎机异步调用服务器端以返回用户余额。这很有挑战性,因为单元测试中没有网络,AJAX调用会失败。当我们编写单元测试时,我们应该尽量编写没有副作用的代码,IO当然也属于这一类。

function testGetBalanceGoesToNetwork(){
 var url, callback;
 var networkStub = {
  send : function() {
   url = arguments[0];
   callback = arguments[1];
  }
 };


 var slotMachine = new drw.SlotMachine(null, null, null, null, networkStub);


 slotMachine.getBalance();


 assertEquals('/getBalance.jsp', url);
 assertEquals('function', typeof callback);
}

这个测试使用了网络stub。什么是stub呢?stub与mock有什么区别呢?许多开发者经常混淆这个两个词,认为它们是同义词。测试社区中,stub这个词是保留给基于状态测试的。JavaScript中它通常是指一个简单的object literal,能够返回预先硬编码的数值。而mock这个词则是保留给交互测试的。Mock可以针对行为训练。这些行为与被测对象进行交互,并且可以验证这些交互。

通过网络客户端stub,我们现在能够测试getBalance方法。通过本地变量url和callback,应用于构造函数的object literal stub能够记录它与被测系统的交互行为。这些本地变量使我们能够在测试的最后执行断言。不幸的是,我们用错工具了。这是一个经典例子,说明了stub的局限性,以及为什么使用mock对象。这个测试的目的不是在给了一定状态之后,验证被测系统的行为。测试关注的是drw.SlotMachine实例与它的一个协作者——网络客户端之间的交互。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:使用 JsUnit JSMock

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接