Конвертировать Rhino Mock в NSubstitute

в настоящее время я меняю некоторые реализации Rhino Mock на NSubstitute. Теперь у меня есть некоторые трудности здесь. может кто-нибудь мне помочь?

            var provider = MockRepository.GenerateStub<IProvider>();
        provider.Stub(e => e.InitMethod(Arg<Info>.Is.Anything, "ABC")).WhenCalled(
            o =>
            {
                validProvidersDto.ExportFolder = (o.Arguments[0] as Info).Name;
                o.ReturnValue = validProvidersDto;
            }).Return(validProvidersDto);

Итак, логика такова: когда InitMethod вызывается через заглушку провайдера. код в WhenCalled будет выполняться и изменять sth. и после этого он возвращает sth.

Теперь я изменил его на NSubstitute, но он несовместим

            var provider = Substitute.For<IProvider>();
        provider.When(a => a.InitMethod(Arg.Any<Info>(), "ABC")).Do(
            o =>
            {
                validProvidersDto.ExportFolder = (o.Arguments[0] as Info).Name;
                o.ReturnValue = validProvidersDto;
            }).Returns(validProvidersDto);

Я не знаю, как правильно преобразовать этот WhenCalled из Rhino Mock в NSubstitute.

Благодарю за вашу помощь!


person user7112196    schedule 06.09.2019    source источник
comment
На данный момент вопрос неясен. sth?   -  person Nkosi    schedule 06.09.2019
comment
Каково текущее и ожидаемое поведение.   -  person Nkosi    schedule 06.09.2019
comment
Представим, как выглядит IProvider.   -  person Lukasz Szczygielek    schedule 06.09.2019
comment
предоставьте объект IProivder и validProvidersDto, что ожидается от этого тестирования, чтобы мы могли вам помочь   -  person maytham-ɯɐɥʇʎɐɯ    schedule 06.09.2019
comment
что-л. означает код внутри функции WhenCalled. Боюсь, что я не могу дать никакой дополнительной информации в соответствии с IProvider и validProvidersDto, так как они так или иначе связаны с правилами компании. Тем не менее, основное внимание здесь уделяется тому, как преобразовать метод WhenCalled из Rhino Mock в NSubstitute. Информация внутри метода WhenCalled в настоящее время не имеет значения. Что я знаю до сих пор, так это преобразование из Arg‹Info›.Is.AnyThing в Arg.Any‹Info›() и MockRepository.GenerateStub в Substitute.For. Я предполагаю, что NSubstitute не предлагает идентичную функцию для случая WhenCalled.   -  person user7112196    schedule 07.09.2019


Ответы (1)


Я думаю, вы можете сделать то, что вам нужно, используя обратный вызов Returns:

var provider = Substitute.For<IProvider>();
provider.InitMethod(Arg.Any<Info>(), "ABC").Returns(
    o => {
        validProvidersDto.ExportFolder = o.Arg<Info>().Name;
        return validProvidersDto;
    });
person David Tchepak    schedule 09.09.2019