2010-08-04 1 views
4

그래서 메인 클래스에서 행렬을 사용하여 픽셀을 설정하거나 해제하는 몇 가지 방법을 사용했습니다. 모든 현재 테스트가 실행 중이므로 이미 매트릭스와 관련된 로직을 추출하고 Matrix 클래스를 작성해야한다고 결정했습니다.TDDing 할 때 클래스 추출 중. 새 추출 된 클래스를 테스트하는 방법?

내 질문은 내가 현재 SUT 클래스에 대해 가지고있는 테스트 이외에 (단, 나는 처음부터 그렇습니다. 그래서 현재 SUT의 주요 클래스 하나만 가지고 있습니다), 단위 테스트를 만들어야합니까? 그렇다면 어떻게해야할까요? 내 말은, 지금 당장 모든 코드를 그대로두고, 기능적으로 원하는 모든 것을 가지고 있고 거기에있는 코드 만 리팩터링 할 때까지 테스트 첫 번째 방법을 통해 하나씩 단위 테스트를 만듭니다. 방금 Matrix 클래스를 작성하고 이전 테스트가 통과하고 있는지 확인하고 모든 것이 괜찮은지 확인하십시오.

감사합니다.

답변

8

기본적으로 후자입니다. 클래스가 뚜렷한 클래스로 정의 되었기 때문에 클래스를 테스트 할 필요가 없습니다. 기능을 추가하거나 동작을 변경하지 않고 리팩토링하는 경우 테스트를 추가하는 유일한 이유는 코드의 특정 부분에 대한 확신이 부족하기 때문입니다. 그렇지 않으면, 코드는 이미 테스트 중이며 다른 클래스를 통해 테스트된다는 사실은 중요하지 않습니다.

코드의 구조가 너무 바뀌어 조직적으로 테스트를 이동하려는 경우가 있으므로이 코드를 실제로 테스트하는 위치를 알 수 있습니다. 그러나 이것은 "이것은 독립적 인 단위이므로 독립적 인 시험을 가져야한다"는 것과는 다른 질문이다.

+0

예, 이제 테스트 방법을 살펴 보았습니다.이 새로운 Matrix 클래스의 테스트 클래스로 이동할 가치가있는 것은 하나도 없습니다. 나는 모든 것을 그대로 리팩토링하고 떠날 것입니다. –

3

이러한 종류의 리팩터링을 수행하려면 컴파일러에서 안내해야합니다. 원하는 모든 것을 별도의 클래스로 가져 와서 컴파일하십시오. 프로덕션 코드와 테스트에서 새 클래스를 사용해야하는 위치를 알려줍니다. 컴파일하고 다시 테스트 할 때까지 모든 것을 리팩토링하십시오.

올바른 방법은 메서드/속성을 하나씩 이동하는 것입니다. 프로세스/속성을 하나씩 옮기는 것만 큼 그 방법이 얼마나 편한지에 달려 있습니다.

EDIT 코드를 작성하기에 충분한 테스트를 작성하면됩니다. 조직을 위해서 주 테스트 클래스에 있던 테스트를 별도의 클래스로 옮겨야하지만 그게 전부입니다. 리팩토링 프로세스에 더 많은 코드 (예 : 새 클래스의 인스턴스를 만드는 메소드)를 작성해야하는 경우 해당 클래스의 테스트도 작성해야합니다.

OneBigClass 
-Method1 
-Method2 
-Method3 

OneBigClassTest 
-Method1ShouldDoSomething 
-Method2ShouldDoSomething 
-Method3ShouldDoSomething 

이 수업이 어떻게 보일지입니다 리팩토링 후 : : 그것은 새싹하는 시간이다 것을

OneBigClass 
-Method1 
-Method2 

SmallerClass 
-Method3 

OneBigClassTest 
-Method1ShouldDoSomething 
-Method2ShouldDoSomething 

SmallerClassTest 
-Method3ShouldDoSomething 
7

한 비교적 흔한 힌트

는 클래스와 테스트 클래스로 시작 말 클래스는 테스트하려는 개인 메소드가 있다는 것입니다. 이러한 상황에서 테스트가 실제로 리펙토링을 추진하게하십시오. (아직 작성되지 않은) 클래스에 (현재 개인용) 메소드에 대한 테스트를 작성하십시오. 새 클래스의 인스턴스를 기존 클래스에 제공하고 개인 메서드를 새 클래스로 이동하여 이동하면서 public으로 만듭니다.

+1

그게 바로 지금 내게 일어났습니다. 내가 당신의 게시물을 읽었을 때, 나는 즉시 무엇을해야하는지 알았다 : P –