도움이 될만한 사람.ASP.NET MVC를 구현하고 테스트하는 방법 FakeRepository
저는 ASP.NET MVC 프레임 워크를 사용하여 코드를 작성하려고합니다.이 개념을 팔았습니다.
내 주요 걸림돌은 데이터베이스를 대체하는 저장소를 설정하고 테스트하는 방법입니다. MVC 응용 프로그램을 테스트하기 위해 클래스를 만들고이를 fakerepository.cs라고 부릅니다.이 클래스는 IContactManagerRepository 인터페이스의 메서드를 구현합니다.
namespace MyTestMVCProject.Models
{
public class FakeContactManagerRepository : IContactManagerRepository
{
IList<Contact> _contacts = new List<Contact>();
#region IContactManagerRepository Members
public Contact Create(Contact contact)
{
_contacts.Add(contact);
return contact;
}
public Contact Edit(Contact contact)
{
throw new NotImplementedException();
}
public void Delete(int id)
{
throw new NotImplementedException();
}
public IList<Contact> ListContacts()
{
return _contacts;
}
#endregion
}
}
아래의 테스트 시도에서 나는 연락처가 만들어졌고 ID 값이 정확한지 확인하고자합니다.
[Test]
public void Test_02_ContactController_Passes_ViewData_To_Details_View()
{
// Arrange
ContactController _controller = new ContactController();
// Act
var _contact = new Contact
{
Id = 1,
FirstName = "Donald",
LastName = "Duck"
};
var _result = _controller.Create(_contact) as ViewResult;
var contact = _result.ViewData.Model as Contact;
// Assert
Assert.AreEqual(1, _contact.Id);
}
불행히도 테스트는 항상 실패합니다.
물론 테스트하기가 너무 쉽지만 Google에서 검색하고 ASP.NET MVC 비디오를 보면서 짧은 시간 안에 많은 것을 습득했습니다.
누구든지 ViewResult에 목록을 반환하는 fakerepository를 테스트 할 수있는 방법을 제안 할 수 있습니까?
[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 당신이 실제 사용은 실제 저장소를 주입 할 수 FakeContactManagerRepository으로 제공 테스트에서 생성자
public ContactController(IContactManagerRepository repository);
에 IContactManagerRepository을한다 :