拆解后的phpunit数据库测试

时间:2012-08-13 15:23:43

标签: selenium phpunit database-testing

我想在testcase / testsuite中执行几个测试(通过selenium)并将数据库测试挂钩到每个tearDown的末尾(使用无法在tearDown中调用的assert)。

所以工作流程将是:

  • 在setUpBeforeClass()
  • 中设置与数据库的连接和Schema
  • 在setUp()
  • 中设置数据库(仅限内容)
  • 执行test01
  • TearDown内容
  • 断言,如果数据库中的每个表的rowCount为零。

那么有没有办法将额外的断言挂钩到每个tearDown的末尾?

我尝试在assertPreConditions中设置安装程序,在assertPostConditions中尝试使用tearDown但这有点难看。

提前谢谢

1 个答案:

答案 0 :(得分: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);
    }