Как правильно протестировать метод с возвращаемым типом перечисления, используя 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);