25

我正在寻找一种如何以不同的设置多次运行测试用例的方法。

我正在测试一个数据库访问类(数十种测试方法),并希望在“正常模式”和“调试模式”下对其进行测试。两种模式必须产生相同的测试结果。

在测试用例设置中是否有可能做到这一点?还是重写 run() 方法?我不想写两次测试,当然:)

谢谢

编辑:知道了!

public function run(PHPUnit_Framework_TestResult $result = NULL)
{
    if ($result === NULL) {
        $result = $this->createResult();
    }

    /**
     * Run the testsuite multiple times with different debug level
     */
    $this->debugLevel = 0;
    print "Setting debug level to: " . $this->debugLevel . PHP_EOL;
    $result->run($this);

    $this->debugLevel = 8;
    print "Setting debug level to: " . $this->debugLevel . PHP_EOL;
    $result->run($this);

    $this->debugLevel = 16;
    print "Setting debug level to: " . $this->debugLevel . PHP_EOL;
    $result->run($this);

    return $result;
}

public function setUp()
{
    parent::setUp();
    $this->myclass->setOptions('debug', $this->debugLevel);
}
4

3 回答 3

4

我认为斯文的答案是正确的。写下你想要设置的内容,并给出你需要的测试用例参数,比如:

/**
 * @dataProvider forMyTest
 */
public function testWithDifferentDbType($type, $param1, $param ....)
{
    $this->assertExists(....);
}

public function forMyTest() {
    return [
        [
            true
            [$prodDb, $param1, $param, .....],
        ],
        [   
            false,
            [$debugDb, $param1 $param, ....,

        ],
    ];
}
于 2020-04-07T10:11:54.660 回答
0

PHPUnit 提供测试装饰器。文档实际上有重复装饰器作为如何处理装饰器的示例。装饰器将以可重用的方式实现行为的完美方式,而不依赖于子类化PHPUnit_Framework_TestCase

于 2014-07-05T21:50:33.437 回答
0

您可以在单元测试中创建多个方法。所有这些都将运行,setUp每个测试方法运行后都会调用该方法。

于 2019-12-14T01:25:36.817 回答