2011-01-10 55 views
4

在PHPUnit我可以测试成功如果一类特定的呼叫适当抛出这样一个异常:如何使用PHPUnit的setExpectedException()?

try 
{ 
    $dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn'); 
} 
catch (Exception $ex) 
{ 
    return; 
} 
$this->fail("Import_Driver_Excel::get_file_type_from_file_name() does not properly throw an exception"); 

但我读here有一个简单的方法,基本上都在使用setExpectedException()一行:

class ExceptionTest extends PHPUnit_Framework_TestCase 
{ 
    public function testException() 
    { 
     $this->setExpectedException('InvalidArgumentException'); 
    } 
} 

但我怎么得到它在上面的例子中工作,也就是我想测试类引发此异常只有当我米使用“BAD_NAME.nnn”致电特定电话?这些变体不起作用:

$dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn'); 
$this->setExpectedException('Exception'); 

也不是这:

$this->setExpectedException('Exception'); 
$dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn'); 

如何使用setExpectedException()来代替我上面的工作的例子吗?

+5

你的第二个例子是正确的。你能指出什么不起作用吗? – Gordon 2011-01-10 11:32:11

+0

`$ this-> setExpectedException('Exception');抛出新的异常();` - 如果你执行这个代码? – zerkms 2011-01-10 11:37:38

回答

0

您可以使用expectedException annotation

class ExceptionTest extends PHPUnit_Framework_TestCase 
{ 
    /** 
    * @expectedException InvalidArgumentException 
    */ 
    public function testException() 
    { 
     $dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn'); 

    } 
}