2016-09-13 4 views
0

내가 그들을 호출하는 대신에, 예를 들면이로, 모든 단위 테스트에서 그 (것)들을 반복하여 내 phpunit을 기능의 일부를 재사용 할 .php, 그것은 모든 단위 테스트를 위해 실행됩니다.재사용하는 방법 phpunit을 기능

어디에 넣을 수 있습니까? 또는 일반적으로 어떻게 이루어 집니까? BTW, 나는

+0

, 단위 테스트 관련이 있어야합니다

abstract class A extends \PHPUnit_Framework_TestCase { public function assertFoo() { ... } public function assertBar() { ... } } class B extends A { public function testFoo() { $this->assertFoo(); ...} public function testBaz() {...} } class C extends A { public function testBar() { $this->assertBar(); ...} public function testQuz() {...} } 

지금, 당신은 단지 4 검사를 주장. 응답의 내용과 다른 시나리오를 설정할 때 예상되는 구체적인 차이점을 확인하십시오. – jedifans

+0

@jedifans 자신의 단언을하기 위해 어떤 문제도 보이지 않는다. –

+0

자신 만의 것이지만 반복적으로 각 테스트에 대해 동일한 주장을 주장하는 것은 테스트가 설정하는 내용이 달라지지 않는다는 것을 나타낸다. 모든 공동 작업자는 조롱 받아야하기 때문에 응답이 비어있을 수있는 몇 가지 명백한 경우 만 있어야합니다. – jedifans

답변

0

분명히 문제는 테스트를 다시 사용하는 것이 아니라 예상치 못한 테스트가 호출되는 것입니다.

따라서 기존 클래스에서 "test"(testFoo, testBar)로 시작하는 이름을 가진 메소드는 테스트로 간주됩니다.

그래서 당신은 당신이 8 개 테스트해야합니다

class A extends \PHPUnit_Framework_TestCase { 
    public function testFoo() {...} 
    public function testBar() {...} 
} 

class B extends A { 
    public function testBaz() {...} 
} 

class C extends A { 
    public function testQuz() {...} 
} 

이 같은 클래스 A, B와 C가 경우 : a :: testFoo()하는 :: testBar(), B :: testFoo을() B :: testBar(), B :: testBaz(), C :: testFoo(), C :: testBar(), C :: testQuery().

아마도 당신이하려고 한 것이 아닙니다. testFoo와 testBar는 A와는 달리 B와 C에서만 사용할 수 있습니다.이 경우 A를 추상 클래스로 선언하면됩니다. B : testFoo(), B :: testBar(), B :: testBaz(), C :: testFoo(), C :: testBar(), C :

abstract class A extends \PHPUnit_Framework_TestCase { 
    public function testFoo() {...} 
    public function testBar() {...} 
} 

class B extends A { 
    public function testBaz() {...} 
} 

class C extends A { 
    public function testQuz() {...} 
} 

이제 6 개 검사를 : : testQuz().

어쩌면, 당신이 필요로하는 것일 수도 있습니다. 어쩌면 일부 계승 클래스에서만 testFoo() 및 testBar()를 사용하려고합니다.

이 경우 테스트 대신 상위 클래스에 어설 션을 설정하십시오. B : testFoo(), B :: testBaz, C : testBar(), C :: testQuz()

일반적으로
+0

에게 주셔서 감사합니다. 지금 시도해보십시오. 마지막 코드가 필요했습니다. 한 가지, assertFoo()와 assertBar 클래스 A에 구현 권한이 있습니까? 빈 메서드가 아닌가? – aiiwa

+0

물론입니다. 그것은 결국 코드 반복을 피하기위한 주요 목표입니다. 추신 대답을 해결책으로 표시하는 것을 잊지 마세요 :) –

+0

위대한, 그냥 잘 했어. 고마워! – aiiwa

0

to this manual

namespace Vendor\Library\Tests; 

abstract class BaseTestCase extends \PHPUnit_Framework_TestCase 
{ 
    public function assertContentNotEmpty($response) { 
     $this->assertNotEmpty($response); 
    } 
} 

같은 것을 확인 한 다음 테스트를이 클래스를 확장에 따라 자신의 주장을 확인 Laravel 4.를 사용하고 있습니다. 이 방법이 어떤 이유로 편리하지 않은 경우 별도의 클래스로 어설 션을 만들 수 있습니다.

+0

setUp, tearDown 및 다른 방법은 어떨까요? 다시 반복해야합니까? 또한, TestCase를 쓰는 것과 어떻게 다른가요? 모든 테스트에서 실행되지 않습니까? 죄송합니다, phpunit을 처음 사용하셨습니다. – aiiwa

+0

"모든 테스트를 실행 하시겠습니까?" $ this-> assertNotEmpty ($ response) 테스트를 호출 할 때만 실행됩니다. setUp, tearDown은 부모 클래스에 no를 정의 할 필요가 없지만, 테스트에서 테스트하기 위해 무언가를 다시 사용하고자한다면 할 수 있습니다. –

+0

현재, 내 단위 테스트는 TestCase.php를 확장하고 있습니다. 내 주요 문제는, 거기에 재사용 가능한 기능을 배치하면, 그들은 나를 부르지 않고 기본적으로 실행됩니다. – aiiwa

관련 문제