2013-09-30 3 views
1

unittesting을 시도하고 TDD를 따르려고 애쓰는 중입니다.Phpunit : 동일한 결과가있는 테스트

내가 내 CardStackTest,이 같은 테스트를 수있다 ...

public function testGetTopStackThrowsExceptionIfFirstArgumentNotInt() 
public function testGetTopStackReturnsNullIfNoCardsAvailable() 
public function testGetTopStackReturnsInstanceOfCardStack() 
public function testGetTopStackRemovesAmountOfCardsFromStack() 
public function testGetTopStackReturnsRestOfCardsIfNumberHigherThanCardsAvailable() 

지금 ...이 모든 작업하는 모든 괜찮 기꺼이 더 나은 시험 방법 명명에 대한 힌트를 받아 들인다.

내 질문입니다. 내 마음 속에, 나는 이미 getBottomStack 방법을 invisioned했다. 그리고 정확히 내 getTopStack 메서드와 동일한 테스트가 필요합니다 알아요. 어쩌면 나는 이것을 하나의 추가 시험으로 추가 할 것이다.

첫 번째 아이디어는 testReturnsInstanceOfCardStack과 같은 개인 방법을 만든 다음 공개 테스트 지점을 비공개로 설정하는 것이 었습니다.

하지만 같은 방식으로 각 테스트를 작성해야하나요, 아니면 이것을 말려서 재사용 가능한 테스트를 만드는 방법이 있습니까?

답변

1

테스트 케이스 내에서 코드 중복을 받기 시작하면 테스트 케이스의 코드도 리팩토링 할 수 있습니다.

그러나 모든 테스트가 초록색 (합격) 인 경우 리팩터링 에만주의해야합니다. 이 규칙은 코드 기반뿐만 아니라 테스트 기반에도 적용됩니다.

예를 들어, 중복 코드를 개인 메서드로 옮기고 public testXyz() - 메서드에서 호출 할 수 있습니다. 여기

테스트의 경우에 개인 도우미 함수에 대해서 예입니다, 시나리오는 다른,하지만 answer to "PHPUnit Testing version of assertIsA"에서 설명하는 데 도움이 될 것입니다

private function assertNumber($actual, $message = "Is a number") { 
    $isScalar = is_scalar($actual); 
    $isNumber = $isScalar && (is_int($actual) || is_float($actual)); 
    $this->assertTrue($isNumber, $message); 
} 

또 다른 방법으로 재사용 가능한 테스트를 데이터 제공 업체와 함께하는 것은 테스트 데이터를위한 것입니다. 예를 들어 여러 테스트 메소드가 동일한 테스트 데이터를 필요로하는 경우 둘 다 하나의 데이터 제공 업체를 공유 할 수 있습니다.

일부 일반적인 안내가 도움이 되었기를 바랍니다. 자신을 시험해보고 모든 코드와 테스트를 버전 관리하에 두는 것을 잊지 말고 자주 커밋하십시오.