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?

questionAnswers(8)

yourAnswerToTheQuestion