1

我想在测试用例/测试套件中执行几个测试(通过 selenium),并将数据库测试挂钩到每个 tearDown 的末尾(使用无法在 tearDown 中调用的断言)。

所以工作流程是:

  • 在 setUpBeforeClass() 中设置与数据库和模式的连接
  • 在 setUp() 中设置数据库(仅内容)
  • 执行 test01
  • 拆解内容
  • 断言数据库中的每个表的行数是否为零。

那么有没有办法在每次拆解的末尾附加一个断言?

我尝试在 assertPreConditions 中进行设置,并在 assertPostConditions 中进行拆卸,但这有点难看。

提前谢谢

4

1 回答 1

0

似乎您可以在任何地方使用断言,甚至在tearDown(). 此测试用例(另存为 testTearDown.php,使用 运行phpunit testTearDown.php)正确地给出了失败:

class TearDownTest extends PHPUnit_Framework_TestCase
{

/** */
public function setUp(){
    echo "In setUp\n";
    //$this->assertTrue(false);
    }

/** */
public function tearDown(){
    echo "In tearDown\n";
    $this->assertTrue(false);
    }

/** */
public function assertPreConditions(){
    echo "In assertPreConditions\n";
    //$this->assertTrue(false);
    }

/** */
public function assertPostConditions(){
    echo "In assertPostConditions\n";
    //$this->assertTrue(false);
    }

/**
*/
public function testAdd(){
    $this->assertEquals(3, 1+2);
    }

}

但是,我的一条经验法则是:如果软件让我的生活变得困难,也许我做错了什么。您写道,在tearDown代码运行后您想要:“断言如果数据库中的每个表的 rowCount 为零。

这听起来像是您想验证您的单元测试代码是否已正确编写,在这种情况下,tearDown 是否正确完成了它的工作?这与您实际测试的代码没有任何关系。使用 phpUnit 断言机制会令人困惑和误导;在我上面的示例中,当 tearDown 断言它告诉我 testAdd() 失败了。如果实际上是 tearDown() 中的代码不能正常工作,我想被告知。所以,为了验证你的单元测试代码,为什么不使用 PHP 的断言:

所以我想知道你想要的 tearDown() 函数是否看起来像这样:

public function tearDown(){
    tidyUpDatabase();
    $cnt=selectCount("table1");
    assert($cnt==0);
    $cnt=selectCount("table2");
    assert($cnt==0);
    }
于 2012-08-13T23:44:45.683 回答