例如,该操作在test1外部存储数据*test2然后执行断言,但tearDown删除该数据从而中断test2.无法删除缓存删除,tearDown因为其他测试依赖于它.这个问题是询问是否有办法在保持功能的同时跳过依赖情况之间的setUp/tearDown @depends(如果第一次测试失败而不是第二次测试失败,则跳过第二次测试).
public function tearDown() {
// delete cache
}
// verify the expected data was retrieved from an uncached source
public function test1() {
$sut = new SystemUnderTest();
$data = $sut->getDataAndCache();
$this->assertEquals('expected', $data);
return $sut;
}
// verify the expected data was cached
/** @depends test1 */
public function test2($sut) {
$this->assertEquals('expected', $sut->getCache());
}
Run Code Online (Sandbox Code Playgroud)
*我们称之为集成测试,因为它们与外部系统交互.
Ger*_*che 17
在设置方法中,您可以检查测试是否有hasDependencies(),然后跳过设置过程:
public function setUp()
{
if (!$this->hasDependencies()) {
// do setup tasks
}
}
Run Code Online (Sandbox Code Playgroud)
我的一个想法是使用静态字段,例如is_depends将其设置为 true intest1和 false in ,并test2在运行之前检查 的值。例如setUptearDownis_depends
private static is_depends;
public function setUp() {
if (self::$is_depends) return;
// do setup that shouldn't be done between dependencies
}
public function tearDown() {
if (self::$is_depends) return;
// delete cache
}
// verify the expected data was retrieved from an uncached source
public function test1() {
$sut = new SystemUnderTest();
$data = $sut->getDataAndCache();
$this->assertEquals('expected', $data);
self::$is_depends = true;
return $sut;
}
// verify the expected data was cached
/** @depends test1 */
public function test2($sut) {
$this->assertEquals('expected', $sut->getCache());
self::$is_depends = false;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
| 归档时间: |
|
| 查看次数: |
2557 次 |
| 最近记录: |