Unit testing PHPUnit正在报告错误,而不是识别assertFalse()
我试图测试一个简单的Laravel模型,它需要密码和电子邮件属性。我的测试结果如下Unit testing PHPUnit正在报告错误,而不是识别assertFalse(),unit-testing,laravel-4,phpunit,Unit Testing,Laravel 4,Phpunit,我试图测试一个简单的Laravel模型,它需要密码和电子邮件属性。我的测试结果如下 public function testEmailIsRequired() { $user = new User; $user->password = 'derp'; // should not save $this->assertFalse($user->save()); } 我不是正确地认为这不起作用,也不是一个成功的测试,而是 1) UserTest:
public function testEmailIsRequired() {
$user = new User;
$user->password = 'derp';
// should not save
$this->assertFalse($user->save());
}
我不是正确地认为这不起作用,也不是一个成功的测试,而是
1) UserTest::testEmailIsRequired
Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation:
19 NOT NULL constraint failed: users.email
(SQL: insert into "users" ("password", "updated_at", "created_at")
values (derp, 2014-09-26 15:27:07, 2014-09-26 15:27:07))
[...]
FAILURES!
Tests: 1, Assertions: 0, Errors: 1.
恐怕我在这里完全是个新手。在我看来,PHPUnit应该抑制数据库驱动程序自己的错误报告,而只是接受false…help?您的测试正在寻找返回false的函数。函数中生成的任何其他错误仍将返回,因为您正在调用该函数
public function testEmailIsRequired()
{
$user = new User;
$user->password = 'derp';
// should not save
$this->assertFalse($user->save());
}
public function testMockSaveWorks()
{
$Mock = $this->getMock('User', array('save'));
// Set up the expectation for the getResult() method
$Mock->expects($this->any())
->method('save')
->will($this->returnValue(true));
$this->assertTrue($Mock->save());
}
class User()
{
...
public function save()
{
if( is_null($this->email) )
return false;
...
return true;
}
}
然后,您应该使用mock删除实际的save函数及其与数据库的连接,并让mock返回true来假装保存记录,以表明您已经测试了模块。User::save的代码是什么样子的?如果需要电子邮件,你的代码不应该退出而不是试图保存到数据库吗?我明白了。我认为所有这些功能都是为了雄辩而内置的。谢谢Steven&Schleis。