PHPUnit:测试数据库时出现问题

标签 php postgresql phpunit

我刚开始使用 PhpUnit 进行数据库测试。我从比较 PostgreSQL 表的内容与 xml 文件的简单测试开始。

问题是断言没有按预期工作:

请看结果:

http://www3.picturepush.com/photo/a/5540556/1024/Anonymous/Screenshot.png

如您所见,表是相等的,但数据库表中的内容(屏幕上的第一个)有一个额外的空格...

我不知道哪里出了问题。

这是 PHP 代码:

public function testGetSourceData()
{
    include_once(
            sfConfig::get('sf_lib_dir')
            . '/task/ShopCategoryTreeUpdateTask.class.php'
    );

    $method = new ReflectionMethod(
      'ShopCategoryTreeUpdateTask', '_getSourceData'
    );

    $method->setAccessible(TRUE);

    $res = $method->invoke(new ShopCategoryTreeUpdateTask(new sfEventDispatcher, new sfFormatter),123);

    $actual = new PHPUnit_Extensions_Database_DataSet_QueryDataSet($this->getConnection());
    $actual->addTable('shop');

    $expected = $this->getDataSet();

    $this->assertDataSetsEqual(
        $actual,
        $expected
    );

}

这里是 XML: http://pastebin.com/5MmtJDr6

感谢任何目标!

最佳答案

我认为你可能把测试复杂化了。在您的方法中,QueryDataSet 和 getDataSet 可能将结果呈现为不同的字符串。

您实际上不应该通过反射来测试私有(private)和公共(public)方法,因为这些方法应该可以通过您的公共(public)方法进行测试和访问。如果它们不能通过公共(public)方法访问,那么它们将永远无法被调用。您的代码覆盖率报告在这里派上用场。

关于PHPUnit:测试数据库时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5801297/

相关文章:

javascript - 使用框输入重定向页面

php - 如何使用PHP触发JS onClick事件

php - 提交 : Please do not click submit more than once! 时避免 PHP 中的竞争条件

postgresql - PostgreSQL 中数据库操作的复杂性?

Postgresql Golang Martini 插入键

exception - 在 zend 框架中运行 Controller 单元测试时出现 "No default module defined for this application"异常

php - INSERT INTO 不适用于 Mysql 数据库

python - sqlalchemy.exc.NoSuchModuleError : Can't load plugin: sqlalchemy. 方言:postgres

php - 文件导入导出模块的单元测试

php - 通过终端在 linux 上安装旧版本 oh phpunit