来自C#中的Moq,您可以执行以下操作:
someMock
.Setup(toBeMocked => toBeMocked.MockedMethod(It.IsAny<Something>()))
.Returns(something);
然后在我打电话时进行单元测试
toBeMocked.MockedMethod()
它返回something
。我该如何使用sinonjs?
答案 0 :(得分:1)
从文档https://sinonjs.org/releases/v7.2.2/stubs/:
const fakeMethod = () => something;
const stub = sinon.stub(toBeMocked , 'MockedMethod');
stub.callsFake(fakeMethod);
UPDATE:示例jsfiddle
答案 1 :(得分:1)
Sinon与Moq的工作方式略有不同,主要是因为C#与JS的语言有很大不同。 Moq创建子类以注入伪造的方法,而sinon可以通过将它们直接分配给对象来注入它们。
假设toBeMocked
是具有实例方法MockedMethod
的对象,大多数基本模式将是:
sinon.stub(toBeMocked, 'MockedMethod').returns(something);
这会将存根方法分配给MockedMethod
对象的toBeMocked
属性。因此,即使MockedMethod
是原型方法,它也只会影响该对象。
如果要为构造函数的所有实例替换方法,则可以执行此操作。假设MockedClass
是您用来创建toBeMocked
对象的构造函数,它看起来像这样:
sinon.stub(MockedClass.prototype, 'MockedMethod').returns(something);
然后在您的拆卸代码中:
MockedClass.prototype.MockedMethod.restore();
您需要像这样恢复它,因为不会在测试之间重新创建该原型,因此,存根将污染您的其他测试代码。