2017-03-03 1 views
0

나는 그렇게TDD를 사용하여 클래스의 공용 공개 API 부분을 제거하려면 어떻게합니까?

public class Foo : ICompletable 
{ 
    public IAmCompleted { get; set;} // from interface 
    private IFooCollab collab; 

    public Foo(IFooCollab collab) 
{ 
    this.collab = collab; 

} 

public YouCompleteMe() 
{ 
    this.collab.command(); 
this. IAmCompleted = true; 

} 

[TestFixture] 
public class Tests 
{ 
public void when_i_am_completed_then_completed_is_true() 
{ 
    var sut = new Foo(new mock<IFooColab>().object); 
    Assert.That(sut.IsCompleted, Is.True); 
} 


[Test] 
public void when_i_am_completed_command_is_issued() 
{ 
var collabMock = new mock<IFooCollab>(); 
...sut blah 
    collabMock.verify(x => x.command(), Times.Once) 
} 
} 

리터를 사용하여 인터페이스를 제거하고 새로운 것을 같은 클래스 I이해야 할 것입니다 있습니다. 나는 그것을 시험에서 어떻게 이끌어 낼 수 있습니까? 테스트를 삭제하면 기능이 그대로 유지됩니다. 이드는 거의 반대 의견을 말하면서 굳은 코드를 깨뜨림으로써 테스트를 풀었다. grd .. 녹색 빨간색 삭제

+0

전화 중의 버스에서 누군가 mr. – brumScouse

+0

공중이 왜 공중인지 궁금합니다.) – ApolloSoftware

+0

TDD에 대한 전문가가 아니지만 제거해야하는 인터페이스가 더 이상 존재하지 않는다는 리플렉션을 사용하여 테스트 할 수 있습니까? – Tim

답변

1

사용하지 않는 코드를 제거하는 것은 리팩토링 단계의 일부이다. 코드가 정말로 필요하지 않은 경우 코드를 제거하고 기존 테스트를 실행하면 모든 것이 통과됩니다.

+0

IAmCompleted 속성에 대한 테스트를 명시해야합니다. 먼저 인터페이스를 변경하고 실패한 테스트를 수정해야합니까? 그들을 제거함으로써? – brumScouse

+0

엄격하게 말하면 테스트가 요구 사항을 올바르게 설명하지 않기 때문에 먼저 테스트를 변경하거나 삭제해야합니다. 그러나 컴퓨터를 실행하고 실패한 것을 확인하여 컴퓨터가 잘못된 테스트를 찾도록하는 것이 더 쉬울 수도 있습니다. –

+0

내가 선호하는 것 같니? 이것은 아주 종교적이 될 수 있습니다. 내가 찾는 더 어려운 것 중 하나는 특정 접근 방식을 추구하겠다는 나의 결정을 방어하는 것입니다. 비록 논리적으로, 그것은 의미 있고 결과는 동일합니다 .... – brumScouse

관련 문제