Макет общего метода со списком объектов - PullRequest
0 голосов
/ 04 декабря 2018

Ниже представлен мой интерфейс, имеющий 2 метода: один исключая один объект ICommand, а второй исключая список объектов ICommnd.

Мой первый метод работает правильно.но мой второй метод не вызывается через Mock.Но фактическая реализация называется.

Может кто-нибудь подсказать, чего мне не хватает.

public interface ICommandBus
{
    void Dispatch<TCommand>(TCommand command) where TCommand : ICommand;

    void Dispatch<TCommand>(IList<TCommand> commands) where TCommand : ICommand;

}


    [Test]
    public void Test_Should_Work()
    {
        var commands = new List<ICommand>();
        var mockDispatcher = Container.Instance.RegisterMock<ICommandBus>();
        mockDispatcher.Setup(x => x.Dispatch(It.IsAny<ICommand>())).Callback<ICommand>(x => commands.Add(x));
        mockDispatcher.Setup(x => x.Dispatch(It.IsAny<IList<ICommand>>())).Throws(new Exception("Some Error"));


        var commandBus = SportsContainer.Resolve<ICommandBus>();

        var commandslist = new List<UpdateCommand>()
        {
            new UpdateCommand(),
            new UpdateCommand()
        };

         //first call is working 
        commandBus.Dispatch<UpdateCommand>(commandslist[0]);

        //its not working. expected should throw an exception. but nothing is happening. 
        commandBus.Dispatch<UpdateCommand>(commandslist);


    }
}

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Я наконец смог получить то, что мне нужно.Мне нужно быть конкретным в определении настройки для ICommand, и это сработало.

[Test]
public void Test_Should_Work()
{
        var commands = new List<ICommand>();
        var mockDispatcher = Container.Instance.RegisterMock<ICommandBus>();
        mockDispatcher.Setup(x => x.Dispatch(It.IsAny<IList<UpdateCommand>>())).Throws(new Exception("Some Error"));

        var commandBus = SportsContainer.Resolve<ICommandBus>();

        var commandslist = new List<UpdateScheduleCommand>()
        {
            new UpdateCommand(),
            new UpdateCommand()
        };

        //first call is working 
        //commandBus.Dispatch<UpdateScheduleCommand>(commandslist[0]);

        //its Working now.
        commandBus.Dispatch(commandslist);

}
0 голосов
/ 04 декабря 2018

Ваш тест не проверяет какой-либо код от вас, он просто проверяет, работает ли свободная копияВы не можете протестировать интерфейс.

Ваш код не генерирует, потому что вы используете свободный макет (по умолчанию), который ничего не делает и просто возвращает ноль для любого вызова без установки.Вы передаете List<UpdateCommand> вызову, настроенному с помощью It.IsAny<IList<ICommand>>(), который не соответствует, поэтому ваш .Throws() никогда не выполняется, а вместо него возвращается null.

Не издевайтесь над классомтестируется, потому что тогда вы вообще ничего не тестируете.

Итак, вы хотите проверить свою реализацию:

var dispatcher = new YourDispatcher():
dispatcher.Dispatch<UpdateCommand>(commandslist[0]);
dispatcher.Dispatch<UpdateCommand>(commandslist);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...