riando uma simulação no phpunit sem zombar de nenhum métod
uando estou testando meu código php com o PHPUnit, estou tentando descobrir o caminho certo para zombar de um objeto sem zombar de nenhum de seus método
O problema é que, se eu não ligar paragetMockBuilder()->setMethods()
, todos os métodos no objeto serão zombados e não posso chamar o método que quero testar; mas se euFa ligarsetMethods()
, então preciso dizer qual método zombar, mas não quero zombar de nenhum método. Mas preciso criar a simulação para evitar chamar o construtor no meu test
Aqui está um exemplo trivial de um método que eu gostaria de testar:
class Foobar
{
public function __construct()
{
// stuff happens here ...
}
public function myMethod($s)
{
// I want to test this
return (strlen($s) > 3);
}
}
Posso testarmyMethod()
com:
$obj = new Foobar();
$this->assertTrue($obj->myMethod('abcd'));
Mas isso chamaria o construtor de Foobar, o que eu não quero. Então, em vez disso, eu tentaria:
$obj = $this->getMockBuilder('Foobar')->disableOriginalConstructor()->getMock();
$this->assertTrue($obj->myMethod('abcd'));
Mas chamandogetMockBuilder()
sem utilizarsetMethods()
resultará na zombaria de todos os seus métodos e retornará nulo; portanto, minha chamada paramyMethod()
retornará nulo sem tocar no código que pretendo testa
A minha solução até agora foi essa:
$obj = $this->getMockBuilder('Foobar')->setMethods(array('none'))
->disableOriginalConstructor()->getMock();
$this->assertTrue($obj->myMethod('abcd'));
Isso zomba de um método chamado 'none', que não existe, mas o PHPUnit não se importa. Ele deixará myMethod () desmembrado para que eu possa chamá-lo e também permitirá que eu desative o construtor para que eu não o chame. Perfeito! Exceto que parece trapaça precisar especificar um nome de método que não exista - 'none', 'blargh' ou 'xyzzy'.
Qual seria o caminho certo para fazer isso?