2016-09-16 65 views
4

我有一個類,發出非致命通知:如何在測試時查看通知?

class MyClass { 
    public function foo(){ 
     trigger_error('Notice this message.', E_USER_NOTICE); 
     return true; 
    } 
} 

這是一個基本的單元測試:

class MyClassTest extends PHPUnit_Framework_TestCase { 
    public function testCanFoo(){ 
     $obj = new MyClass; 
     $this->assertTrue($obj->foo()); 
    } 
} 

自然PHPUnit的這個通知轉換爲例外,未捕獲的必然失敗的試驗,一個錯誤。

There was 1 error:

1) MyClassTest::testCanFoo
Notice this message.

首先,我要指出,我愛,我可以看到這個通知,並是我想要的,但測試失敗

我知道我可以通過docblock通過測試。

class MyClassTest extends PHPUnit_Framework_TestCase { 
    /** 
    * @expectedException PHPUnit_Framework_Error_Notice 
    */ 
    public function testCanFoo(){ 
     $obj = new MyClass; 
     $this->assertTrue($obj->foo()); 
    } 
} 

但現在通知完全被吞沒了。

PHPUnit 5.5.4 by Sebastian Bergmann and contributors.

. 1/1 (100%)

Time: 17 ms, Memory: 4.00MB

OK (1 test, 1 assertion)

我怎樣才能得到它通過測試查看通知的消息?

+0

[這個問題](http://stackoverflow.com/questions/8412746/ignoring-the-php-warnings-in-phpunit)看起來它有一些有用的信息。 –

+0

Thanks @ Don'tPanic我確實遇到過這個問題,但都是我的docblock解決方案的替代方案。 –

+0

啊,我明白了。我不確定是否不將它們轉換爲例外會阻止它們顯示或不顯示。 –

回答

1

可以禁用轉換爲例外以這種方式:

class MyClassTest extends PHPUnit_Framework_TestCase { 
    public function testCanFoo(){ 
     // disable conversion into exception 
     PHPUnit_Framework_Error_Notice::$enabled = false; 
     $obj = new MyClass; 
     $this->assertTrue($obj->foo()); 
    } 
} 
+0

謝謝,我不知道我是如何錯過的。 –