2009-07-10 5 views
0

TDD 시작하기 리포지토리 기반 모델을 토대로합니다. 그러나, 어떻게 NUnit를 효과적으로 말을 사용할 수 있습니다TDD - 인터페이스의 존재 여부 테스트

SomeInterfaceExists() 

내가

이 실제로 의미가 있는가 등), 각 도메인 모델 (예를 들어 ICarRepository, IDriverRepository)에 대한 테스트를 만들려면? 당신이 TDD와 함께 테스트 뭔가 아니다

감사

답변

4

TDD는 당신이

  • 당신은 단위를 생성을 테스트 할 클래스의 개요 (방법을) 쓰기 당신에게

    1. 을 의미하는 테스트 우선 방식으로 진행하여 개발 (디자인)를 구동 의미 당신은 당신의 단위 테스트를 실행
    2. 이 클래스의 스케치에 대한 테스트 ->이
    3. 을 실패 할 것이다 당신은 당신이 당신의 클래스를 리팩토링 테스트 통과를
    4. 를 만들기 위해 충분한, 당신의 클래스를 해킹

    이것은 각 항목에 대해 반복됩니다.

    void AssertSomeInterfaceExists(object domainObject) 
    { 
        Assert.IsTrue(domainObject is ICarRepository); 
    } 
    

    당신은이 테스트를 쓸 수있는 누군가가 ICarRepository을 구현 더 이상 당신의 도메인 객체를 변경하지 않는 경우가 나중에 실패합니다

  • 4

    합니다. 이 클래스에서 해당 인터페이스의 메서드 중 하나를 호출 할 수 있고 올바른 결과를 반환 할 수 있습니까?

    +0

    TDD를 사용할 때마다 닭고기와 계란 시나리오를 사용합니다. 예 : 그들은이 방법이 존재한다는 테스트를 만듭니다. 처음에는 빨간색이었고, 다음은 구현했습니다 ... 예상 된 결과를 얻지 못했습니다 ... 그러면 녹색이됩니다. My Repository를 테스트하려면 Interface가 존재하는지 테스트해야합니다. –

    +0

    링크를 표시하십시오. 나는 그것이 우스꽝스러운 것이라고 생각한다. –

    +1

    요컨대, "순수한"TDD에서는 어떤 인터페이스를 만들지 미리 결정하지 않습니다. 실패한 테스트를 작성하여 시작하십시오. 테스트를 통과하기 위해 데이터 액세스를해야하고이 패턴을 사용할 것인지 결정한 경우 필요한 한 가지 방법으로 인터페이스를 작성하십시오. 그런 다음 필요한 한 가지 방법을 구현하는 클래스를 만듭니다. 그런 다음 테스트 통과, 리팩터링, 리팩토링, 반복을 참조하십시오. –

    0

    도메인 개체에 데이터 액세스 코드가 필요하지 않은 경우 어떻게됩니까? 예를 들면 장바구니?

    2

    는 다음과 같은 것을 작성할 수 있습니다. 그러나이 인터페이스를 구현하는 도메인 객체에 의존하는 다른 단위 테스트는 더 이상 컴파일되지 않으므로이 테스트가 다소 중복 될 수 있습니다.

    0

    당신은 인터페이스의 존재를 신성 반사를 사용할 수 있지만 그 TDD의 아이디어를 스트레칭처럼 보인다.

    TDD는 시간이 지남에 따라 기능이 유지되는지 확인하는 것이지 특정 디자인 패턴이 적용되었는지에 대한 것이 아닙니다. Juri가 지적했듯이 테스트는 절대 빌드가 아닙니다.

    3

    나는 컴파일러 '시험'(내가 그 논쟁 문 알고) 인터페이스의 존재가 그것을 구현하는 클래스를 컴파일 할 때 말할 것입니다. 테스트에서 인터페이스 존재 여부를 명시 적으로 테스트 할 것으로 기대합니다. 아무 것도 증명하지 못하기 때문입니다. 클래스가 정의되었는지 테스트하지 않고, 클래스의 메소드를 테스트합니다.

    1

    당신은 당신의 인터페이스가 존재하는지 여부를 테스트 할 필요가 없습니다. 당신은 실제로 아무것도 테스트하지 않습니다.

    2

    테스트의 인터페이스를 사용할 때마다 인터페이스의 존재 여부는 암시입니다.예를 들어, 인터페이스 또는, 당신은 부분적으로 말한다 테스트, 작성할 수있는 모든 구현하기 전에 :이 ICAR 인터페이스의 존재를 설정

    ICar car = new Convertible(); 
    

    을 -가 생성 될 때까지 테스트가 컴파일되지 않습니다 - 그 컨버터블은 ICar를 구현합니다. 당신이 부르는 자동차의 모든 방법은 더 많은 인터페이스를 만들 것입니다.

    관련 문제