Возможно ли создать фальшь вне тестового примера в PhpUnit?

Это может показаться глупым, надеюсь, что нет, но я хочу создать службу, которая вернет макеты для людей, которые используют мой проект, чтобы они могли издеваться над всеми классами из моего проекта и проверить их код.

Моя идея заключалась в том, чтобы предложить такой сервис, чтобы его можно было вызывать в тестовых случаях другого проекта и получить соответствующий макет для каждого теста.

Это возможно? Или есть другие способы сделать это. Кстати, я не могу использовать какую-то насмешливую библиотеку из-за ограничений проекта.

Solutions Collecting From Web of "Возможно ли создать фальшь вне тестового примера в PhpUnit?"

Да, это возможно. Под капотом метод getMock использует класс PHPUnit_Framework_MockObject_Generator . Поэтому вы можете использовать его напрямую:

 PHPUnit_Framework_MockObject_Generator::getMock($originalClassName, $methods) 

Но вы потеряете все ярлыки ожидания, такие как $this->once() . Вам нужно будет создавать собственные ожидания:

$mock->expects(\PHPUnit_Framework_TestCase::once())

Посмотрите исходный код PHPUnit, чтобы узнать, как строятся макеты

Если вы построите макет вне TestCase, он не будет учитываться как макет, и его ожидания не будут проверяться автоматически.

Если ваша служба mock builder должна использоваться исключительно из тестов PHPUnit (даже если эти тесты не связаны), вы можете передать экземпляр testcase в mock-конструктор, чтобы вы могли строить макет обычным способом:

 class MockBuilderService { private $test; public function __construct(PHPUnit_Framework_TestCase $test) { $this->test = $test; } public function buildVeryComplexMock() { $mock = $this->test->getMock('MyClass'); $mock->expects($this->test->once()) ->method('foo') ->willReturn(1); return $mock; } } 

Поэтому вы можете использовать его из своего теста:

 class ATest extends PHPUnit_Framework_TestCase { public function testFoo() { $mock_builder = new MockBuilderService($this); $complex_mock = $mock_builder->buildVeryComplexMock($mock_configuration); // the mock expectations will be checked as usual } }