새로 생성 된 인스턴스를 조롱 하시겠습니까?
-
05-07-2019 - |
문제
TDD를 사용하지 않은 오래된 코드가 있습니다. 이제 다음과 같은 기능에 대한 테스트를 작성하고 싶습니다.
function somefunction($someargs){
// do a few checks on $someargs
$database = new DB_PG();
$result = $database->select($query);
// do some changes on result
return $result;
}
PHPUNIT 및 테스트에 대해별로 만료되지 않았기 때문에 내 질문은 다음과 같습니다. 어떻게 DB_PG를 조롱 할 수 있습니까? 테스트에서 getMock ()을 시도했지만 함수는 "새"를 사용하여 인스턴스를 가져 오기 때문에 Mock Object가 무시됩니다.
그래서 나는 2 가지 옵션 만 본다
- 내가 모르는 phpunit의 일부 기능 - 내가 여기서 묻는 이유 ^^
- 이전 코드를 수정해야합니다.
그렇다면 옵션 1에 대한 답을 아는 사람이 있습니까?
thx 모두
해결책
옵션 1
다음과 같이 작동하도록 기능을 변경할 수 있습니까?
function someFunc($existingArgs, $db = null)
{
$db = (is_null($db)) = new DB_PG();
$result = $db->select($query)
$return $result;
}
이렇게하면 DB 인스턴스를 전달할 수 있습니다.이 기능을 테스트 할 수 있습니다.이 기능은 적어도이 기능을 테스트 할 수 있습니다. 향후 일부는 Nodfunc의 작업이 모델에 관한 것이며 DB로드 작업은 DAO/Repository/Factory를 통해 발생합니다.
옵션 2
DB_PG 가이 함수가 존재하는 파일에 요구/포함/포함을 통해 아직 가져 오지 않은 경우 테스트 클래스 내에서 더미 클래스를 정의 할 수 있습니다.
class DB_PG
{
public function select($query)
{
//use phpunit's libs to output a mock object, you'll need to use the PHPUnit_Framework_Mock::generate() static method, I think that's the name.
return $mockResult;
}
}
그렇게하면 결과에서 발생하는 일을 제어 할 수 있습니다.
제휴하지 않습니다 StackOverflow