如何模拟对 return 特定数据的依赖?
How do I mock dependencies to return specific data?
来自 C# 中的 Moq,您可以在其中执行以下操作:
someMock
.Setup(toBeMocked => toBeMocked.MockedMethod(It.IsAny<Something>()))
.Returns(something);
然后在单元测试的时候调用
toBeMocked.MockedMethod()
它returns something
。我如何使用 sinonjs 执行此操作?
来自文档 https://sinonjs.org/releases/v7.2.2/stubs/ :
const fakeMethod = () => something;
const stub = sinon.stub(toBeMocked , 'MockedMethod');
stub.callsFake(fakeMethod);
更新:例子jsfiddle
Sinon 的工作方式与 Moq 略有不同,主要是因为 C# 是一种与 JS 截然不同的语言。 Moq 创建 sub-类 来注入假方法,而 sinon 能够通过将它们直接分配给对象来注入它们。
最基本的模式是,假设 toBeMocked
是一个具有实例方法的对象 MockedMethod
:
sinon.stub(toBeMocked, 'MockedMethod').returns(something);
这会将存根方法分配给 toBeMocked
对象的 MockedMethod
属性。因此,它只会影响该对象,即使 MockedMethod
是原型方法。
如果你想为构造函数的所有实例替换一个方法,你可以这样做。假设 MockedClass
是您用来创建 toBeMocked
对象的构造函数,它看起来像这样:
sinon.stub(MockedClass.prototype, 'MockedMethod').returns(something);
然后在您的拆卸代码中:
MockedClass.prototype.MockedMethod.restore();
您需要像这样恢复它,因为在测试之间不会重新创建该原型,所以如果您不这样做,您的存根将污染您的其他测试代码。
来自 C# 中的 Moq,您可以在其中执行以下操作:
someMock
.Setup(toBeMocked => toBeMocked.MockedMethod(It.IsAny<Something>()))
.Returns(something);
然后在单元测试的时候调用
toBeMocked.MockedMethod()
它returns something
。我如何使用 sinonjs 执行此操作?
来自文档 https://sinonjs.org/releases/v7.2.2/stubs/ :
const fakeMethod = () => something;
const stub = sinon.stub(toBeMocked , 'MockedMethod');
stub.callsFake(fakeMethod);
更新:例子jsfiddle
Sinon 的工作方式与 Moq 略有不同,主要是因为 C# 是一种与 JS 截然不同的语言。 Moq 创建 sub-类 来注入假方法,而 sinon 能够通过将它们直接分配给对象来注入它们。
最基本的模式是,假设 toBeMocked
是一个具有实例方法的对象 MockedMethod
:
sinon.stub(toBeMocked, 'MockedMethod').returns(something);
这会将存根方法分配给 toBeMocked
对象的 MockedMethod
属性。因此,它只会影响该对象,即使 MockedMethod
是原型方法。
如果你想为构造函数的所有实例替换一个方法,你可以这样做。假设 MockedClass
是您用来创建 toBeMocked
对象的构造函数,它看起来像这样:
sinon.stub(MockedClass.prototype, 'MockedMethod').returns(something);
然后在您的拆卸代码中:
MockedClass.prototype.MockedMethod.restore();
您需要像这样恢复它,因为在测试之间不会重新创建该原型,所以如果您不这样做,您的存根将污染您的其他测试代码。