Javascript-测试管理器对象
我正在开始测试世界,但仍然有一些我无法理解的疑问。我在谷歌上搜索了每一个,但找不到任何有用的东西 如果我有以下对象,它的职责是管理服务器上连接的设备,那么为它编写哪些测试是有意义的,我应该如何编写这些测试Javascript-测试管理器对象,javascript,unit-testing,tdd,bdd,Javascript,Unit Testing,Tdd,Bdd,我正在开始测试世界,但仍然有一些我无法理解的疑问。我在谷歌上搜索了每一个,但找不到任何有用的东西 如果我有以下对象,它的职责是管理服务器上连接的设备,那么为它编写哪些测试是有意义的,我应该如何编写这些测试 var devicesManager = { _devices: {}, attachDevice: function(device) { _devices[device.id] = device; }, detachDevice: functi
var devicesManager = {
_devices: {},
attachDevice: function(device) {
_devices[device.id] = device;
},
detachDevice: function(device) {
delete _devices[device.id];
},
sendCommand: function(device_id, command) {
devices[device_id].performTask(command);
}
}
到目前为止,我需要从我的对象中获得这些行为。我的问题是:
如果使用真实的设备对象,则为“是”。如果使用模拟对象(编号)来测试attachDevice和detachDevice方法,则可以添加另一个方法,该方法会告诉您是否连接了设备。您以后可能需要它:
deviceIsAttached:function(device){
return _devices.hasOwnProperty(device.id);
}
然后,您可以连接、测试设备是否已连接并分离
作为测试sendCommand方法的一个想法,您可以将command(参数)转换为更复杂的对象,该对象知道如何测试内容(如其范围内的状态)。然后,您可以生成特殊类型的“debug”或“test”命令,执行这些命令时可以测试执行它们的对象/方法。感谢您提供了非常有用的答案。我只是对创建DeviceAttached并使用它测试attachDevice方法有一个疑问。当我这样做的时候,我会在一种情况下测试这两种方法吗?例如,DeviceAttached的测试与attachDevice有什么不同?非常感谢。@Thiago您将使用DevicesAttached方法来向测试方法公开状态。因为它做的事情非常简单,所以不必测试DeviceAttached方法。attachDevice/detachDevice的完整测试如下:1。创建一个新设备,比如id为4()。2.assert deviceIsAttached(设备)返回false(设备尚未连接)。3.附件设备(设备)。4.assert deviceIsAttached(设备)返回true。5.拆卸装置(装置)。6.assert DeviceAttached(设备)返回false。我没有读过任何关于白盒测试的内容。我一定会查的。关于模拟的事情,我想即使我在模拟另一个对象,我也在做集成测试。我对集成测试的理解是测试两部分之间的通信是否正确。非常感谢您的回答。我正在阅读Sinon.js文档,它说:
mock应该只用于测试中的方法。
。我认为这很奇怪,因为您通常会模拟与测试对象相关的对象。你怎么认为?这是url: