我正在锁定一种模拟对象并填充其属性的方法.以下是使用另一个对象的属性的方法示例:
class MyClass {
private $_object;
public function methodUnderTest($object) {
$this->_object = $object;
return $this->_object->property
}
}
Run Code Online (Sandbox Code Playgroud)
要单元测试这个方法我应该$object用getMockBuilder()方法创建一个模拟PHPUnit.但我找不到一种方法来模拟属性$object,只是方法.
Class我知道在 a 中间创建 a 实例method是一种不好的做法,因为它使代码难以测试。但我无法重构代码,所以我需要找到一种方法来模拟在测试过程中Object创建的对象。newmethod
使用的框架:PHPUnit, Mockery,WP_Mock
示例:这里我需要模拟get_second_string()类实例中的方法ExternalClass
Class MyClass {
function methodUnderTest($string) {
$objToMock = new ExternalClass();
$second_string = $objToMock->get_second_string();
$final_string = $string . $second_string;
return $final_string;
}
}
Class TestMyClass extends PHPUnit_Framework_TestCase {
public function setUp() {
}
public function tearDown() {
}
public function test_methodUnderTest() {
$externalObject = $this->getMockBuilder('ExternalClass')
->setMethods(['get_second_string'])
->getMock;
$externalObject->expects($this->once())
->method('get_second_string')
->willReturn(' two');
$testObj = new MyClass();
$this->assertEquals('one two', $testObj->methodUnderTest('one');
} …Run Code Online (Sandbox Code Playgroud) 正如标题所述,我期待找到一种方法来防止error_log()在测试期间在终端中打印消息PHPUnit。
在上面的示例中,被测试的方法通过 error_log('Don\'t show up'),在测试之间打印其消息。
有什么方法可以防止这种行为,让我的测试日志保持美观?另外,有什么方法可以捕获消息并测试其输出吗?(对于消息不是简单字符串的情况)。