В приложении silex у меня есть класс KafkaAPiClient
, который определенно имеет общедоступный метод postMessages
.
<?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
Я в замешательстве, я ожидал, что макет ничего не сделает, но позволит вызывать методы, чтобы позже я мог добавить к нему свои ожидания.
Хотя я нашел решение, мне все еще интересно, можно ли смоделировать все методы по умолчанию, а затем проверить, были ли вызваны определенные из них.