【问题标题】:Test multiple class with same PHPUnit test case使用相同的 PHPUnit 测试用例测试多个类
【发布时间】:2012-09-02 18:53:53
【问题描述】:

我有非常简单的php界面:

interface HasFormattableNumber {
    function setNumber();
    function setFormat();
    function formatNumber();
}

接下来,我有许多实现这个接口的类。不幸的是,这些类不能有一个共同的祖先(可能是一个只实现这些方法一次的抽象类)。这个类基本上是这样的:

class A implements HasFormattableNumber {
    private $_number;
    private $_format;

    public function setNumber($n) {
        $this->_number = $n;
    }
    public function setFormat($f) {
        $this->_format = $f;
    }
    public function formatNumber() {
        return sprintf($this->_format, $this->_number);
    }
}

单元测试看起来像这样:

class ATest extends \PHPUnit_Framework_TestCase {
    public function testShouldFormatNumber() {
        $a = new A();
        $a->setNumber(123);
        $a->setFormat("xx-%d");
        $this->assertEquals("xx-123", $a->formatNumber());
    }
}

是否有可能以某种方式为所有接口实现重用这个测试用例?我知道我可以将 testShouldFormatNumber() 复制并粘贴到我的所有单元测试中,但如果可能的话,我更喜欢将它保存在一个地方。

php Traits 有什么帮助吗? (不过,我还没有使用 php 5.4)

【问题讨论】:

    标签: php unit-testing phpunit


    【解决方案1】:

    您可以创建一个看起来像您的 ATest 的基本测试,但您不初始化其中的类 A,而是使用您将在所有实现中定义的类变量。您将文件放在一个目录中或使用一个名称,这样 PHPUnit 就不会运行它。然后在您的测试中,您可以从它继承并在 setUp() 中将对象创建为类变量。

    【讨论】:

    • 是的,我使用了这种方法,所有测试都在基类中。效果很好。
    猜你喜欢
    • 1970-01-01
    • 2021-03-23
    • 2014-07-21
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    相关资源
    最近更新 更多