【发布时间】:2015-08-29 12:07:45
【问题描述】:
我为控制器编写了一个测试,该控制器将表单传递的一些数据保存在数据库中。
我编写了以下测试方法来确保如果表单为空则抛出异常:
public function testRegisterNewMerchantExceptionNoDataSubmitted()
{
$client = static::createClient();
$crawler = $client->request('GET', '/getstarted');
$form = $crawler->selectButton('getStarted[submit]')->form();
$form['getStarted[email]'] = '';
$this->setExpectedException('DomainException');
$client->submit($form);
$this->assertEquals(500, $client->getResponse()->getStatusCode());
//dump($client->getResponse());die;
}
我正在测试的方法如下:
public function endAction(Request $request)
{
$form = $this->createForm(new GetStartedType());
$form->handleRequest($request);
if ($form->isValid()) {
// Get data from form
$data = $form->getData();
} else {
throw new \DomainException('No data submitted.');
}
...
我确信在测试期间也会引发异常,因为转储 Response 对象页面是一个 500 错误,报告确切的消息“未提交数据”。更何况,对状态码的assertEquals测试是成功的,所以毫无疑问是正确抛出了异常。
但$this->setExpectedException() 测试不会拦截它并返回测试失败。
知道为什么会这样吗?
【问题讨论】:
-
你能 c/p phpunit 命令的确切输出吗?另外,您可以尝试testExceptionHasRightMessage 之类的方法来确保整个 phpunit 工作正常吗?