如果您单独执行每个测试方法,您的测试代码将共享很多行,这些行只是创建要测试的对象。此共享代码可以(但不应该)进入 setup 方法。
创建要测试的对象所需执行的任何操作也会进入 setup 方法,例如创建注入到测试对象的构造函数中的模拟对象。
这一切都不需要拆除,因为下一次调用 setup 将使用一组新的对象初始化类成员变量。
唯一需要拆卸的是您的测试是否会永久留下某些内容,例如创建的文件或数据库条目。编写执行此类操作的测试确实不是一个好主意,但在某些时候,您无法再抽象,不得不接触硬盘驱动器、数据库或真实网络之类的东西。
因此,除了需要拆卸之外,还有很多设置,如果没有为此测试做任何工作,我总是删除拆卸方法。
关于模拟,我是这样工作的:
private $_mockedService;
private $_object;
protected function setUp()
{
$this->_mockedService = $this->getMock('My_Service_Class');
$this->_object = new Tested_Class($this->_mockService);
}
public function testStuff()
{
$this->_mockedService->expects($this->any())->method('foo')->will($this->returnValue('bar'));
$this->assertEquals('barbar', $this->_object->getStuffFromServiceAndDouble());
}