使用数据库进行Phpunit测试

我正在尝试使用PHPunit关注单元测试.

在这里找到了一个非常好的教程http://blog.nickbelhomme.com/php/phpunit-training-course-for-free_282

但是有些东西我想念并且还不知道该怎么做.

我有一个用户模块,它维护有关用户的所有信息.还有一个功能保存功能可以将用户保存在数据库中.所以我有一个testFunction

public function testCancreateuser()
{
    $userData = array(
        'userName'  =>  'User1','firstName' =>  'Joey','lastName'  =>  'Hendricks','email'     =>  'Joey@hendricks.com','password'  =>  'f$tfe8F'

    ); 
    $user = new Model_User($userData);
    $user->save();

}

我将第一次参加我的测试.由于数据库是空的.但是当我第二次运行我的测试时它将无法工作,因为我的系统不允许同一个用户数据库中两次.所以为了做到这一点,我必须在每次运行测试之前重新创建我的testdatabase.做这个的最好方式是什么?
或者这个问题是以不同的方式解决的吗?

TNX.

解决方法

如果要测试业务逻辑:模拟数据库类并返回虚假数据

如果你想测试触发sql语句的类(并且你也可以测试它,因为我有点想知道我的代码是否在后端使用真正的数据库工作正常)它有点复杂但有办法做到这一点:

>在运行测试之前使用setUp()和tearDown()为您获取数据的一致状态是(imho)编写数据库驱动的单元测试的好方法.尽管手动编写大量自定义sql会很烦人.
>为了让您的生活更轻松,您可以查看DbUnit extension并查看它是否适用于您的应用程序.
>如果您真的想深入了解Unittesting数据库交互,那么关于该主题的最佳读物是(imho)Sebastian Bergmanns phpqa book中关于db-unittesting的章节.>您的应用程序是否允许自定义数据库名称和所有表的自动设置,也可以使用大量testdata将数据库设置为一次,并在所有测试中使用该数据.你可能会小心,尽管一个测试不依赖于另一个测试所写的数据.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...