gre*_*emo 28 php testing phpunit unit-testing
方法setUp()和tearDown()在每次测试之前和之后调用.但是,真的,有什么真正的单词示例关于我为什么需要这个?
检查其他人的测试,我总是看到类似的东西:
public function setUp()
{
$this->testsub = new TestSubject();
}
public function tearDown()
{
unset($this->testsub);
}
public function testSomething()
{
$this->assertSame('foo', $this->testsub->getFoo());
}
Run Code Online (Sandbox Code Playgroud)
当然,这种方式与"旧"局部变量方式之间几乎没有区别.
Sve*_*ven 30
如果您单独执行每个测试方法,您的测试代码将共享许多行,这些行只是创建要测试的对象.这个共享代码可以(但不应该)进入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());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26461 次 |
| 最近记录: |