Как правильно протестировать метод с возвращаемым типом перечисления, используя justmock/moq

В настоящее время у меня возникают проблемы с тестированием метода, который использует мой контроллер, который является поддельным. у него есть тип возврата определенного перечисления. В настоящее время я всегда возвращаю из этого проверенного метода значение enum по умолчанию, а не значение, которое я указал для возврата. Я что-то пропустил? Я пробовал и Moq, и JustMock lite с одинаковыми результатами. JustMock облегченный пример ниже.

Надеюсь, я не допустил ошибок при копировании кода, я изменил все имена объектов, поэтому извиняюсь за это.

Вот часть модульного теста:

        var returnStatus = ExampleEnum.Invalid;

        //Mock the client
        var client = Mock.Create<ITestInterface>();

        Mock.Arrange(() => client.ValidateSomething(Guid.NewGuid()))
            .Returns(returnStatus).MustBeCalled();


        var testController = new TestController(client);

        var result = testController.DoSomething(Guid.NewGuid().ToString()) as ViewResult;

Вот соответствующие биты от контроллера:

        private ITestInterface _client { get; set; }

        public TestController(ITestInterface client)
        {
            _client = client;
        }

Вот часть моего действия контроллера:

 public ActionResult DoSomething(string id)
        {
            Guid token;
            if(!string.IsNullOrEmpty(id) && Guid.TryParse(id, out token))
            {
                using (var client = _client)
                {
                    ApplicationUser applicationUser;
                    var status = client.ValidateSomething(token);

                    switch (status)
                    {

Клиент проверяется корректно, но возвращаемое свойство status всегда всегда ExampleEnum.DefaultValue, а не значение, указанное в качестве результата.

Я надеюсь, что предоставил достаточно информации. Любая помощь высоко ценится.

1 ответ

Решение

Вы, вероятно, ошиблись.

Guid.NewGuid() возвращает новый случайный GUID, поэтому GUID, который вы используете для настройки макета, и GUID, который вы используете для вызова DoSomething метод никогда не будет прежним.

Вы должны сделать что-то вроде:

var guid = Guid.NewGuid()
...
Mock.Arrange(() => client.ValidateSomething(guid))
        .Returns(returnStatus).MustBeCalled();
...
var result = testController.DoSomething(guid.ToString()) as ViewResult;

используя тот же GUID для макета и для вызова DoSomething,


Я не знаю о JustMock, но с Moq вы также можете просто использовать It.IsAny чтобы соответствовать всем GUID:

client.Setup(c => c.ValidateSomething(It.IsAny<Guid>())).Returns(returnStatus);
Другие вопросы по тегам