Тест может выглядеть следующим образом:
[Test]
public void PostingValidContactCreatesOneInRepositoryAndReturnsViewResult()
{
// Arrange
var controller = new ContactController(new FakeContactManagerRepository());
// Act
var contact = new Contact
{
Id = 1,
FirstName = "Donald",
LastName = "Duck"
};
var result = controller.Create(contact);
//Assert there is one created Contact in repository
Assert.AreEqual(1, Repository.ListContacts().Count());
//Check if result is ViewResult
Assert.IsInstanceOfType(result,typeof(ViewResult));
//Assert item Id is 1
Assert.AreEqual(1, Repository.ListContacts().First().ID);
//Check if posting valid contact doesn't invalidate model state
Assert.IsTrue(controller.ModelState.IsValid);
}
ContactController должен принимать IContactManagerRepository в конструкторе
public ContactController(IContactManagerRepository repository);
В тестах вы предоставляете его с FakeContactManagerRepository, при реальном использовании вы можете добавить свой реальный репозиторий.
РЕДАКТИРОВАТЬ
Ваши ошибки:
var contact = _result.ViewData.Model as Contact;
Отправленный контакт находится не в _result.ViewData.Model, а в параметре функции Create.,
var _result = _controller.Create(_contact) as ViewResult;
Это не ошибка, но вы можете определить как
var _result = _controller.Create(_contact)
и проверить, имеет ли результат правильный тип.
Assert.AreEqual(1, _contact.Id);
Это не имеет смыслаВы назначили _contact.Id несколькими строками ранее.Вы должны взять контакт из хранилища и проверить.