Я довольно новичок в использовании Moq и Nunit для модульного тестирования, и у меня возникают проблемы с одним сценарием. Я хочу, чтобы мой макет имел параметры, которые моя тестируемая система будет использовать, чтобы решить, какие действия предпринять.Параметры Moq out
Моя тестируемая система - это контроллер MVC API и, в частности, я пытаюсь протестировать метод POST. Я хочу вернуть сообщение об ошибке для объекта, когда проверка не удалась.
Вот метод код для контроллера:
public IHttpActionResult Post(Candidate candidate)
{
try
{
if(candidate==null)
return BadRequest();
IEnumerable<string> errors;
_candidateManager.InsertCandidate(candidate, out errors);
if (errors!=null && errors.Any())
return BadRequest(CreateErrorMessage("Invalid candidate: ", errors));
return CreatedAtRoute("DefaultApi", new {id = candidate.CandidateId}, candidate);
}
catch (Exception)
{
return InternalServerError();
}
}
Это мой блок Код проверки:
[Test]
[Category("CandidateManagerController Unit Tests")]
public void Should_Return_Bad_Request_When_Creating_Invalid_Candidate()
{
IEnumerable<string> errors = new List<string>() {"error1", "error2"};
var mockManager = new Mock<ICandidateManager>();
mockManager.Setup(x => x.InsertCandidate(new Candidate(), out errors)).Callback(()=>GetErrors(errors));
var sut = new CandidateManagerController(mockManager.Object);
var actionResult = sut.Post(new Candidate());
Assert.IsInstanceOf<BadRequestResult>(actionResult);
}
Что я ожидаю, что когда _candidateManager.InsertCandidate() выполняется тогда ошибки переменная заполняется. Однако то, что происходит, заключается в том, что при выполнении кода кода контроллера ошибки равны нулю после запуска метода _candidateManager.InsertCandidate().
Если у кого-то есть идеи, что я делаю неправильно, или если то, что я хочу сделать, невозможно с помощью Moq, то, пожалуйста, дайте мне знать.
Благодаря
Вы должны установить ошибки. Какова реализация GetErrors? –