我开始测试世界,仍然有一些疑惑,我无法弄清楚。我为每一个搜索,但找不到任何有用的东西。Javascript - 测试经理对象
如果我有以下目的,那么有责任管理我服务器上的连接设备,哪些测试有意义写入以及如何编写这些测试?
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);
}
}
这些是我从目标到目前为止需要的行为。我的问题是:
该对象有两种方法来附加和分离设备。从我读过的东西我不应该在我的测试中使用任何“私人”的东西,所以我想我不能检查_devices对象,看看方法是否正在做他们应该做的。由于它们不返回任何东西,我应该如何测试这些方法?还是我应该不测试它们?
sendCommand方法也是一个void返回方法。我仍然对如何测试无法改变对象状态的void方法感到困惑。如果我监视设备方法来检查performTask是否正确调用,我会进行集成测试(而不是单元)吗?
我希望我很清楚。
感谢
谢谢你非常有帮助的答案。我对创建deviceIstact并使用它来测试attachDevice方法有一个疑问。当我这样做时,我会在一种情况下测试两种方法吗?例如,对于deviceIsAttached的测试如何与attachDevice不同?非常感谢你。 – Thiago
@Thiago你会使用deviceIsAttached方法来暴露状态到测试方法。既然它做了一件非常简单的事情,你不应该测试deviceIsAttached方法。对于attachDevice/detachDevice的完整测试可能是这样的:1.创建一个新设备,让我们来说说id 4(http://xkcd.com/221/)。 2. assert deviceIsAttached(device)返回false(设备尚未连接)。 3. attachDevice(设备)。 4. assert deviceIsAttached(device)返回true。 5. detachDevice(设备)。 6.断言deviceIsAttached(device)返回false。 – pax162