我想在我的所有测试中都有一个模拟对象,所以我尝试在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方法中构建模拟对象,或者每次测试之前是否必须构建它(在公共函数setUp()方法中?)
答案 0 :(得分:5)
每个模拟对象都绑定到创建它的测试用例实例。由于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'));
}
}