#unit-testing #enums #mocking #moq #justmock
#модульное тестирование #перечисления #издевательство #moq #justmock
Вопрос:
В настоящее время у меня возникают проблемы с тестированием метода, который использует мой контроллер, который издевается. он имеет возвращаемый тип определенного перечисления. В настоящее время я всегда возвращаю из этого издевательского метода значение enum по умолчанию, а не значение, которое я указал для его возврата. Я что-то упускаю? Я пробовал как Moq, так и JustMock lite с одинаковыми результатами. Пример JustMock lite ниже.
Надеюсь, я не допустил никаких ошибок при копировании кода, я изменил все имена объектов, поэтому приношу извинения за это.
Вот часть модульного теста:
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 ViewResu<
Вот соответствующие биты от контроллера:
private ITestInterface _client { get; set; }
public TestController(ITestInterface client)
{
_client = client;
}
Вот часть моего действия контроллера:
public ActionResult DoSomething(string id)
{
Guid token;
if(!string.IsNullOrEmpty(id) amp;amp; 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 ViewResu<
используя один и тот же идентификатор GUID для макета и для вызова DoSomething
.
Я не знаю о JustMock, но с Moq вы также можете просто использовать It.IsAny
для сопоставления всех идентификаторов GUID:
client.Setup(c => c.ValidateSomething(It.IsAny<Guid>())).Returns(returnStatus);
Комментарии:
1. Большое спасибо, это сработало. Я думал, что проблема связана с перечислением, а не с настройкой самого макета. Таким образом, при компоновке макета значение, заданное в возвратах, будет возвращено только в том случае, если значение совпадает со значением, переданным в doSomething, если вы не сделаете то, что вы упомянули с Moq, чтобы соответствовать всем идентификаторам guid.
2. @DanHead Да (я не знаю о JustMock, но я предполагаю, что это то же поведение, что и Moq).