我很高興地編寫單元測試,但他們碰撞時,我將它們都運行在一起。我正在測試此課程:PHPUnit:包含類後嘲笑它
class MyClass {
public function sayHello() {
return 'Hello world';
}
}
使用此測試。所有測試都有這樣的結構:
class MyClassTest extends PHPUnit_Framework_TestCase {
private $subject;
public static function setUpBeforeClass() {
require_once('path/to/MyClass.php');
}
public function setUp() {
$this->subject = new MyClass();
}
public function testSayHello() {
$this->assertEquals('Hello world', $this->subject->sayHello());
}
}
MyClassTest
自行運行良好。但PHPUnit的將崩潰,因爲我重新聲明類,如果另一個測試嘲笑MyClass
偏偏先運行:
class Inject {
private $dependency;
public function __construct(MyClass $myClass) {
$this->dependency = $myClass;
}
public function printGreetings() {
return $this->dependency->sayHello();
}
}
class InjectTest extends PHPUnit_Framework_TestCase {
public function testPrintGreetings() {
$myClassMock = $this
->getMockBuilder('MyClass')
->setMethods(array('sayHello'))
->getMock();
$myClassMock
->expects($this->once())
->method('sayHello')
->will($this->returnValue(TRUE));
$subject = new Inject($myClassMock);
$this->assertEquals('Hello world', $subject->printGreetings());
}
}
我使用一個bootstrap.php中僞造尚未重構一些全局函數。
我沒有自動裝載機,不想處理隔離EVERY測試,因爲它需要永遠。我嘗試在測試1 & 2的文檔塊中插入組合@runTestsInSeparateProcesses
和@preserveGlobalState enabled
/禁用,我仍然得到相同的錯誤。
您需要提供一個可重複的例子。 – hek2mgl 2014-09-09 21:47:02
你爲什麼通過'require_once'語句設置你的模擬,而不是使用Mock Builder API使用適當的模擬功能?閱讀:https://phpunit.de/manual/current/en/test-doubles。html#test-doubles.mock-objects – 2014-09-09 21:53:24
@ hek2mgl,我希望這個例子更好。 – PeerBr 2014-09-09 22:09:50