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();
Вынеобходимо восстановить его следующим образом, поскольку этот прототип не создается заново между тестами, поэтому ваша заглушка будет загрязнять ваш другой тестовый код, если вы этого не сделаете.