PHPUnit - 测试同一对象的两个测试类

时间:2011-10-18 18:09:59

标签: unit-testing phpunit

我有一个访问Web服务的类。它可以选择缓存结果。所以我想写两个测试类。第一个(Ws_Test)在没有缓存的情况下运行测试。第二个(WsCached_Test)扩展第一个并运行相同的测试,但启用了缓存。

理论上解决了我的问题,但是当我运行'所有测试'时,只运行第二个测试类(WsCached_Test)。看起来PHPUnit假设在运行WsCached_Test时已经完全测试了类。

class Ws_Test extends PHPUnit_Framework_TestCase
{
    public function setUp()
    {
        $this->ws = new Ws();
    }

    // lots of tests
}

class WsCached_Test extends Ws_Test
{
    public function setUp()
    {
        $this->ws = new Ws();
        $this->ws->setCacheResults(true);
    }

    // inherits lots of tests
}

1 个答案:

答案 0 :(得分:2)

我不知道这是否能解决这个问题,但我第一次尝试修复的方法是使基类抽象化,并有两个子类:WsCached_TestWsUncached_Test

abstract class BaseWsTester extends PHPUnit_Framework_TestCase
{
    public function setUp()
    {
        $this->ws = new Ws();
    }

    // lots of tests
}

class WsUncached_Test extends BaseWsTester
{
    // inherits lots of tests
}

class WsCached_Test extends BaseWsTester
{
    public function setUp()
    {
        parent::setUp();
        $this->ws->setCacheResults(true);
    }

    // inherits lots of tests
}

选择名称BaseWsTester是为了防止PHPUnit认为它是一个要运行的测试用例,它的抽象性应该有所帮助。如果这不起作用,请将setUp()向下移动到每个子类中,并将其从基类中删除。

相关问题