【问题标题】:PHPUnit - Two test classes to test the same objectPHPUnit - 两个测试类来测试同一个对象
【发布时间】:2011-10-19 02:27:42
【问题描述】:

我有一个访问网络服务的类。它可以选择缓存结果。所以我想写两个测试类。第一个(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
}

【问题讨论】:

    标签: unit-testing phpunit


    【解决方案1】:

    我不知道这是否能解决问题,但我的第一次尝试是使基类抽象并有两个子类: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() 向下移动到每个子类中并将其从基类中删除。

    【讨论】:

    • 简单而完美!谢谢!
    猜你喜欢
    • 2017-10-19
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多