我有如下示例代码(简化自实际代码实现),其主要目的是了解如何为单元测试打桩。
我有一个名为
传感器数据将在
请问如何对
也许期望的存根代码会像这样吗?
或者我可以编写一个如下的模拟类..但我认为 Sinon 可以做到这一点..
我有一个名为
Sensor
的类,它被依赖注入到Context
类中,这个Sensor
将从一些IO
端口获取数据。传感器数据将在
ComputeSensor
类中与期望值进行比较,并将report
键插入到context.report
对象中。请问如何对
Sensor
类进行打桩或模拟,以便可以创建虚假值来测试代码?class Sensor {
getData() {
return {
heat: this.getHeatSensor(), // get data from some IO
speed: this.getSpeedSensor() // get data from some IO
}
}
}
class Context {
constructor(sensor) {
this.report = {};
this.sensor = sensor;
this.computeSensor = new ComputeSensor();
}
execute() {
this.computeSensor.compute(this, this.sensor.getData());
}
}
class ComputeSensor {
compute(context, sensorData) {
if (sensorData.heat === 123
&& sensorData.speed === 321)
{
context.report = {
sensor: 'ok'
}
}
}
}
const sensor = new Sensor();
const context = new Context(sensor);
context.execute();
console.log(context.report) // { sensor: 'ok }
也许期望的存根代码会像这样吗?
const stubSensor = sinon.createStubInstance(Sensor);
// Inject the stub return value here?
stubSensor.getData() = {
heat: 123,
speed: 321,
}
或者我可以编写一个如下的模拟类..但我认为 Sinon 可以做到这一点..
class MockSensor {
getData() {
return {
heat: 123,
speed: 321
}
}
}