我想在我的所有测试中都有一个模拟对象,所以我尝试在 setUpBeforeClass() 方法中创建它,但是这个方法是静态的,所以必须像这样静态调用 getMockBuilder:
public static function setUpBeforeClass() {
self::mocked_object = self::getMockBuilder('MockedClass')
->disableOriginalConstructor()
->getMock();
}
问题是 getMockBuilder 不能被静态调用:
Argument 1 passed to PHPUnit_Framework_MockObject_MockBuilder::__construct() must be an instance of PHPUnit_Framework_TestCase, null given
是否有机会在 setUpBeforeClass 方法中构建模拟对象,还是每次测试前都必须构建它(在 public function setUp() 方法中)?
最佳答案
每个模拟对象都绑定(bind)到创建它的测试用例实例。由于 setUpBeforeClass()
是一个静态方法,它没有实例并且不能创建模拟对象。
相反,在 setUp()
或辅助方法中创建您的模拟,并将它们分配给实例变量或返回它们。
class MyServiceTest extends PHPUnit_Framework_TestCase
{
function setUp() {
$this->connection = $this->getMock('MyDatabaseConnection', array('connect', ...));
$this->connection
->expects($this->once())
->method('connect');
}
function testLogin() {
$this->connection
->expects($this->once())
->method('login')
->with('bob', 'p4ssw0rd');
$service = new MyService($this->connection);
self::assertTrue($service->login('bob', 'p4ssw0rd'));
}
}
关于php - 如何在 phpunit setUpBeforeClass 方法中创建模拟对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7805932/