Customer
의 개체를 검색하는 데 사용되는 ICustomerRepository
인터페이스를 단위 테스트하고 있습니다.인터페이스 저장소 단위 테스트의 목적은 무엇입니까
- 단위 테스트로 어떤 방식으로이 값을
ICustomerRepository
을 통해 테스트 할 수 있습니까? - 어떤 조건에서 아래 테스트가 실패합니까?
- 이런 성격의 테스트를 위해 내가 실패해야하는 테스트를 수행하는 것이 좋습니다. 나는 단지 내가 아마 뭔가를 분명 잃었지만 더 가치가있을 것입니다
ICustomerRepository
를 구현하는 클래스의 통합 테스트를 보인다 저장소
에 5
을 배치 한 알고 ID 4
을 찾아 즉.
[TestClass]
public class CustomerTests : TestClassBase
{
private Customer SetUpCustomerForRepository()
{
return new Customer()
{
CustId = 5,
DifId = "55",
CustLookupName = "The Dude",
LoginList = new[]
{
new Login { LoginCustId = 5, LoginName = "tdude" },
new Login { LoginCustId = 5, LoginName = "tdude2" }
}
};
}
[TestMethod]
public void CanGetCustomerById()
{
// arrange
var customer = SetUpCustomerForRepository();
var repository = Stub<ICustomerRepository>();
// act
repository.Stub(rep => rep.GetById(5)).Return(customer);
// assert
Assert.AreEqual(customer, repository.GetById(5));
}
}
시험 기본 클래스
public class TestClassBase
{
protected T Stub<T>() where T : class
{
return MockRepository.GenerateStub<T>();
}
}
ICustomerRepository 및 IRepository
public interface ICustomerRepository : IRepository<Customer>
{
IList<Customer> FindCustomers(string q);
Customer GetCustomerByDifID(string difId);
Customer GetCustomerByLogin(string loginName);
}
public interface IRepository<T>
{
void Save(T entity);
void Save(List<T> entity);
bool Save(T entity, out string message);
void Delete(T entity);
T GetById(int id);
ICollection<T> FindAll();
}
어떻게? 내가 읽은 곳이라면 단위 테스트를위한 인터페이스를 조롱하는 법을 배웁니다. 우리는 어떻게 구체적인 구현을 단위 테스트합니까? 나는 그것이 내 이해에 피해야한다고 생각했다. 예를 들어 주시겠습니까? 고맙습니다! – Stack0verflow
인터페이스는 실행할 수 있고 따라서 테스트 할 수있는 코드가 아닌 명세이며 선언입니다. 이 스펙을 구체적인 클래스로 구현하면 실행하고 테스트 할 코드가됩니다. 모의 객체를 사용하여 인터페이스를 구현할 수 있습니다.이 인터페이스를 구현하는 객체에 의존하는 * 다른 * 코드를 테스트하는 데 도움이됩니다. 당신은 "인터페이스 테스트"를하지 않고, 해당 구현의 인터페이스 메소드 ("인터페이스에 대한 테스트")를 호출하여 해당 인터페이스의 구현이 올바른지 테스트합니다. –
어리석은 예 : '먹는 (dog)'에 의해 구현되고 '먹이 (먹는 동물)'방법에서 '마스터'에 의해 호출되는 것들에 대한'먹는 (Eater) '인터페이스. 'Dog'를 테스트 할 때, 당신은 dog 인스턴스에서'eat'을 호출하여'Eater' 인터페이스의 구현을 테스트 할 것입니다. 개가 체중을 얻는다는 것. 'Master '의'feed()'메소드를 테스트 할 때,'Eater'라는 모조를 만들어서 그 메소드에 넘겨주고,'eat'이 호출되었는지 확인하십시오. –