2017-12-14 17 views
0

클래스에는 몇 가지 개인 정적 메소드가 있습니다. 내가 phpunit을PHPUnit에서 호출 가능한 인수를 사용하여 메소드를 테스트하는 방법

에서

$actual = Some::getSuperSome(
    ['Some', 'getSome'] // Should be changed ? 
); 

있어 오류로 변경했을 때

class Some { 
    … 
    private static function getSome($x) {…} 
    … 
} 

같은 뭔가 그것은 다른 공공 메소드 내에서 호출과 같은 '일부'클래스

$a = self::getSuperSome(
    [__CLASS__, 'getSome'] 
); 

을 사용

TypeError : App \ Some :: getSuperSome()에 전달 된 인수 blah-blah 호출 가능, 배열 지정 ... 'blah-blah

getSuperSame을 테스트하기 위해 PHPUnit의 SomeTest 클래스에서 args의 이름을 변경하려면 어떻게해야합니까?

+0

단위 테스트는 개인 인터페이스/보호 된 메서드가 아닌 공용 인터페이스를 테스트하기위한 것입니다. 또한 정적 메서드를 사용하여 시작하지 않아야합니다. PHP에서 네임 스페이스 함수를 사용할 수있는 옵션이 있습니다. –

+0

@ tereško ** public ** getSuperSome 메소드를 테스트하고 싶습니다. ** public으로 getSome의 가시성을 변경하면 ** 동일한 오류 메시지가 나타납니다. – dostrog

+0

'[__CLASS__, 'getSome']'은 호출 가능 (올바른 범위에서 수행 된 경우)으로 매우 유효합니다. 어딘가에 다른 문제가 있어야합니다. 더 많은 코드 ([this] (https://stackoverflow.com/help/mcve)) – xmike

답변

-1

먼저 namespace Testnamespace;과 같은 네임 스페이스를 만들어야합니다. 그 후에는 반드시 Access Modifiers를 static public function getSome($x)으로 변경해야합니다. 그런 다음 클래스 선언 아래에서 코드를 시도하여 출력물을 얻을 수 있습니다.

call_user_func_array(__NAMESPACE__ .'\Some::getSome', array('Some','getSome'));