PHPUunit: 여러 인수를 사용하여 여러 메서드 호출을 모의하려면 어떻게 해야 합니까?
저는 PHPUunit을 이용한 방법에 대한 단위 테스트를 작성하고 있습니다.내가 테스트하는 방법은 동일한 개체에 대해 동일한 방법을 세 번 호출하지만 다른 인수 집합을 사용합니다.제 질문은 여기서 여기서 하는 질문과 비슷합니다.
다른 게시물에 올라온 질문들은 하나의 주장만을 취하는 조롱 방법과 관련이 있습니다.
그러나 내 방법은 여러 인수를 사용하므로 다음과 같은 것이 필요합니다.
$mock->expects($this->exactly(3))
->method('MyMockedMethod')
->with(
$this->logicalOr(
$this->equalTo($arg1, $arg2, arg3....argNb),
$this->equalTo($arg1b, $arg2b, arg3b....argNb),
$this->equalTo($arg1c, $arg2c, arg3c....argNc)
)
);
이 코드는 작동하지 않습니다.equalTo()하나의 인수만 유효성을 검사합니다.두 개 이상의 인수를 지정하면 예외가 발생합니다.
PHPUnit_Framework_Constraint_IsEqual의 인수 #2::__syslog는 숫자여야 합니다.
할 수 있는 방법이 있습니까?logicalOr둘 이상의 주장이 있는 방법을 조롱하는 것?
저의 경우 답은 매우 간단했습니다.
$this->expects($this->at(0))
->method('write')
->with(/* first set of params */);
$this->expects($this->at(1))
->method('write')
->with(/* second set of params */);
핵심은 사용하는 것입니다.$this->at(n),와 함께n방법의 N번째 호출입니다.나는 그 어떤 것도 할 수 없었습니다.logicalOr()제가 시도한 변종들.
입력 매개 변수를 일치시키고 여러 통화에 대한 반환 값을 제공하려는 다른 사용자.이것은 나에게 효과가 있습니다.
$mock->method('myMockedMethod')
->withConsecutive([$argA1, $argA2], [$argB1, $argB2], [$argC1, $argC2])
->willReturnOnConsecutiveCalls($retValue1, $retValue2, $retValue3);
$map = array(
array('arg1_1', 'arg2_1', 'arg3_1', 'return_1'),
array('arg1_2', 'arg2_2', 'arg3_2', 'return_2'),
array('arg1_3', 'arg2_3', 'arg3_3', 'return_3'),
);
$mock->expects($this->exactly(3))
->method('MyMockedMethod')
->will($this->returnValueMap($map));
또는 사용할 수 있습니다.
$mock->expects($this->exactly(3))
->method('MyMockedMethod')
->will($this->onConsecutiveCalls('return_1', 'return_2', 'return_3'));
입력 인수를 지정할 필요가 없는 경우
누군가가 phpunit 문서의 해당 섹션을 보지 않고 이것을 발견한 경우, 당신은 withConsecutive 방법을 사용할 수 있습니다.
$mock->expects($this->exactly(3))
->method('MyMockedMethod')
->withConsecutive(
[$arg1, $arg2, $arg3....$argNb],
[arg1b, $arg2b, $arg3b....$argNb],
[$arg1c, $arg2c, $arg3c....$argNc]
...
);
유일한 단점은 코드가 제공된 인수 순서대로 MyMockedMethod를 호출해야 한다는 것입니다.나는 아직 이것을 피할 방법을 찾지 못했습니다.
언급URL : https://stackoverflow.com/questions/10954107/phpunit-how-do-i-mock-multiple-method-calls-with-multiple-arguments
'codememo' 카테고리의 다른 글
| Python에 메서드가 있는지 확인하는 방법은 무엇입니까? (0) | 2023.08.21 |
|---|---|
| jquery $는 실제로 무엇을 반환합니까? (0) | 2023.08.21 |
| Yii 2를 사용하여 Ajax 호출에서 잘못된 요청(#400)을 받는 중 (0) | 2023.08.16 |
| github의 두 분기 간 단일 파일에 대한 디프를 생성하려면 어떻게 해야 합니까? (0) | 2023.08.16 |
| PHP CLI는 사용자로부터 입력을 받은 다음 변수에 덤프하는 것이 가능합니까? (0) | 2023.08.16 |