В приложении silex у меня есть класс KafkaAPiClient
, который определенно имеет общедоступный метод postMessages
.Как исправить издевательства над макетами объекта BadMethodCallException?
<?php
namespace Kopernikus\KafkaWriter;
use Kopernikus\KafkaWriter\Model\AbstractMessage;
/**
* KafkaApiClient.
**/
class KafkaApiClient
{
/**
* @param AbstractMessage[] $msg
*/
public function postMessages(array $messages)
{
foreach ($messages as $message) {
$this->postMessage($message);
}
}
public function postMessage(AbstractMessage $msg)
{
...
}
}
Я могу назвать KafkaAPiClient::postMessages
просто отлично, но когда насмешливый класс в тесте:
<?php
namespace unit\Request;
use Kopernikus\KafkaWriter\KafkaApiClient;
/**
* MockeryMethodsNotBeingCallableTest
**/
class MockeryMethodsNotBeingCallableTest extends \PHPUnit_Framework_TestCase
{
public function testMockMethodIsCallable()
{
$leMock = \Mockery::mock(KafkaApiClient::class);
$leMock->postMessages([]);
}
}
я получаю:
1) unit\Request\MockeryMethodsNotBeingCallableTest::testMockMethodIsCallable
BadMethodCallException: Method Mockery_11_Kopernikus_KafkaWriter_KafkaApiClient::postMessages() does not exist on this mock object
~/le-project/tests/unit/Request/MockeryMethodsNotBeingCallableTest.php:14
Я запутался, я ожидал для макет, чтобы не сделать ничего, но позволить методам называть так, чтобы я позже мог добавить к нему свои надежды.
Несмотря на то, что я нашел решение, мне все еще интересно, можно ли издеваться над всеми методами по умолчанию, а затем проверить, были ли определенные вызовы.
он говорит, что не имеет функцию postMessages()? я думаю, вы должны проверить KafkaApiClient –
@MuratCemYALIN Nope, у конкретного класса есть метод. Я абсолютно уверен в этом, это макет, который этого не делает. – k0pernikus
может быть защищено или закрыто? –