TDD 시작하기 리포지토리 기반 모델을 토대로합니다. 그러나, 어떻게 NUnit를 효과적으로 말을 사용할 수 있습니다TDD - 인터페이스의 존재 여부 테스트
SomeInterfaceExists()
내가
이 실제로 의미가 있는가 등), 각 도메인 모델 (예를 들어 ICarRepository
, IDriverRepository
)에 대한 테스트를 만들려면? 당신이 TDD와 함께 테스트 뭔가 아니다
감사
TDD 시작하기 리포지토리 기반 모델을 토대로합니다. 그러나, 어떻게 NUnit를 효과적으로 말을 사용할 수 있습니다TDD - 인터페이스의 존재 여부 테스트
SomeInterfaceExists()
내가
이 실제로 의미가 있는가 등), 각 도메인 모델 (예를 들어 ICarRepository
, IDriverRepository
)에 대한 테스트를 만들려면? 당신이 TDD와 함께 테스트 뭔가 아니다
감사
TDD는 당신이
이것은 각 항목에 대해 반복됩니다.
void AssertSomeInterfaceExists(object domainObject)
{
Assert.IsTrue(domainObject is ICarRepository);
}
당신은이 테스트를 쓸 수있는 누군가가 ICarRepository을 구현 더 이상 당신의 도메인 객체를 변경하지 않는 경우가 나중에 실패합니다
합니다. 이 클래스에서 해당 인터페이스의 메서드 중 하나를 호출 할 수 있고 올바른 결과를 반환 할 수 있습니까?
도메인 개체에 데이터 액세스 코드가 필요하지 않은 경우 어떻게됩니까? 예를 들면 장바구니?
는 다음과 같은 것을 작성할 수 있습니다. 그러나이 인터페이스를 구현하는 도메인 객체에 의존하는 다른 단위 테스트는 더 이상 컴파일되지 않으므로이 테스트가 다소 중복 될 수 있습니다.
당신은 인터페이스의 존재를 신성 반사를 사용할 수 있지만 그 TDD의 아이디어를 스트레칭처럼 보인다.
TDD는 시간이 지남에 따라 기능이 유지되는지 확인하는 것이지 특정 디자인 패턴이 적용되었는지에 대한 것이 아닙니다. Juri가 지적했듯이 테스트는 절대 빌드가 아닙니다.
나는 컴파일러 '시험'(내가 그 논쟁 문 알고) 인터페이스의 존재가 그것을 구현하는 클래스를 컴파일 할 때 말할 것입니다. 테스트에서 인터페이스 존재 여부를 명시 적으로 테스트 할 것으로 기대합니다. 아무 것도 증명하지 못하기 때문입니다. 클래스가 정의되었는지 테스트하지 않고, 클래스의 메소드를 테스트합니다.
당신은 당신의 인터페이스가 존재하는지 여부를 테스트 할 필요가 없습니다. 당신은 실제로 아무것도 테스트하지 않습니다.
테스트의 인터페이스를 사용할 때마다 인터페이스의 존재 여부는 암시입니다.예를 들어, 인터페이스 또는, 당신은 부분적으로 말한다 테스트, 작성할 수있는 모든 구현하기 전에 :이 ICAR 인터페이스의 존재를 설정
ICar car = new Convertible();
을 -가 생성 될 때까지 테스트가 컴파일되지 않습니다 - 그 컨버터블은 ICar를 구현합니다. 당신이 부르는 자동차의 모든 방법은 더 많은 인터페이스를 만들 것입니다.
TDD를 사용할 때마다 닭고기와 계란 시나리오를 사용합니다. 예 : 그들은이 방법이 존재한다는 테스트를 만듭니다. 처음에는 빨간색이었고, 다음은 구현했습니다 ... 예상 된 결과를 얻지 못했습니다 ... 그러면 녹색이됩니다. My Repository를 테스트하려면 Interface가 존재하는지 테스트해야합니다. –
링크를 표시하십시오. 나는 그것이 우스꽝스러운 것이라고 생각한다. –
요컨대, "순수한"TDD에서는 어떤 인터페이스를 만들지 미리 결정하지 않습니다. 실패한 테스트를 작성하여 시작하십시오. 테스트를 통과하기 위해 데이터 액세스를해야하고이 패턴을 사용할 것인지 결정한 경우 필요한 한 가지 방법으로 인터페이스를 작성하십시오. 그런 다음 필요한 한 가지 방법을 구현하는 클래스를 만듭니다. 그런 다음 테스트 통과, 리팩터링, 리팩토링, 반복을 참조하십시오. –