2014-10-11 6 views
0

클래스 :방법이 잘 작동하는지 테스트하는 방법은 무엇입니까? 테스트에

class TestMe 
{ 
    public function add ($a, $b) 
    { 
     return $a + $b; 
    } 

    public function mul ($a, $b) 
    { 
     return $a * $b; 
    } 

    public function sumAddMul ($a, b) 
    { 
     $i = $this->add ($a, $b); 
     $j = $this->mul ($a, $b); 
     return $i + $j; 
    } 
} 

의 TestClass :

public function testAdd() 
{ 
    $sut = new TestMe(); 
    $this->assertEquals (9, $sut->add(4,5)); 
} 

public function testAdd() 
{ 
    $sut = new TestMe(); 
    $this->assertEquals (8, $sut->mul(4,2)); 
} 

public function testSumAndMul() 
{ 
    ? 
} 

그래서, 어떻게 sumAndMul()을 테스트하기 위해? 물론 다음과 같이 쓸 수 있습니다.

public function testSumAndMul() 
{ 
    $this->assertEquals (3, $this->sut->sumAndMul(1,1)); 
} 

문제는 이미 테스트 한 것과 같은 결과입니다. 그것보다는 오히려 서로 협력하는 것을 테스트합니다.

답변

1

실생활의 예를 보면 내가 더 추측 할 수 있습니다. 그러나 더 복잡한 기능과 복잡한 테스트가있을 때 제안한 방식이 가장 좋습니다. 물론 주어진 인스턴스에서 다음과 같이 한 돌로 세 마리의 새를 죽일 수 있습니다.

public function testSumAndMul() 
{ 
    $sum  = $sut->add(1, 1); 
    $mul  = $sut->mul(1, 1); 
    $sumAndMul = $sut->sumAndMul(1, 1); 

    $this->assertEquals(2, $sum); 
    $this->assertEquals(1, $mul); 
    $this->assertEquals(3, $sumAndMul); 
} 

단위 테스트는 가능한 가장 작은 단위를 테스트하는 것입니다. 큰 덩어리를 테스트하기 시작하면 규칙에서 벗어나기 시작합니다. 각 테스트를 가능한 한 독립적으로 유지하는 것이 가장 좋은 방법 일 것입니다.

1

sumAndMul()은 내부적으로 입력을 기반으로 동작을 변경하는 내부 논리가 없으므로 여기에서 다른 방법을 내부적으로 호출하므로 걱정하지 마십시오 (의미가있는 경우).

예측할 수있는 값을 반환하는지 테스트하십시오. 예 : 1719을 전달하면 359이 다시 출력됩니다.

자신에게 물어 만약 당신이 시험 방법은 그 결과에 도착, 또는 그것을 그 결과 (어떤 결과가) 문제가에 도착한다는 것을인지하는 방법을 정말 관리.

나는 그것이 내부적으로는 add()mul() 호출 sumAndMul()에게 중요한 생각하지 않는다? 분명히 이것들은 예시적인 방법이기 때문에 실제의 상황이 도움이 될까요?

관련 문제