PHPUnit 테스트를 실행할 때 출력을 덤프하여 하나 또는 두 가지를 디버깅 할 수 있기를 원합니다.
나는 다음을 시도했다 ( PHPUnit Manual 예제 와 유사 );
class theTest extends PHPUnit_Framework_TestCase
{
/**
* @outputBuffering disabled
*/
public function testOutput() {
print_r("Hello World");
print "Ping";
echo "Pong";
$out = "Foo";
var_dump($out);
}
}
결과는 다음과 같습니다.
PHPUnit @package_version@ by Sebastian Bergmann.
.
Time: 0 seconds, Memory: 3.00Mb
OK (1 test, 0 assertions)
예상되는 출력이 없습니다.
2011 년 9 월 19 일 현재 git repos 의 HEAD 버전을 사용하고 있습니다.
출력 php -version
:
$ php -version
PHP 5.2.9 (cli) (built: Dec 8 2010 11:36:37)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans
내가 잘못하고있는 것이 있습니까, 아니면 잠재적으로 PHPUnit 버그입니까?
답변
최신 정보
--verbose
커맨드 라인 옵션 보다 훨씬 잘 작동하는 다른 방법을 깨달았습니다 .
class TestSomething extends PHPUnit_Framework_TestCase {
function testSomething() {
$myDebugVar = array(1, 2, 3);
fwrite(STDERR, print_r($myDebugVar, TRUE));
}
}
이를 통해 --verbose
CLI 옵션 과 함께 제공되는 원치 않는 모든 출력없이 언제든지 콘솔에 무엇이든 덤프 할 수 있습니다 .
다른 답변에서 언급했듯이 다음과 같은 내장 방법을 사용하여 출력을 테스트하는 것이 가장 좋습니다.
$this->expectOutputString('foo');
그러나 때로는 테스트 케이스 내에서 장난 꾸러기 일회성 / 일시적 디버깅 결과를 보는 것이 도움이됩니다. var_dump
그러나 해킹 / 해결 방법이 필요하지 않습니다 . --verbose
테스트 스위트를 실행할 때 명령 행 옵션 을 설정하면 쉽게 수행 할 수 있습니다 . 예를 들면 다음과 같습니다.
$ phpunit --verbose -c phpunit.xml
CLI 환경에서 실행할 때 테스트 메소드 내부의 출력이 표시됩니다.
PHPUnit 테스트 테스트 출력 작성을 참조하십시오 .
답변
업데이트 : 훨씬 간단한 해결 방법으로 사용하는 방법에 대해서는 아래 rdlowrey의 업데이트를 참조하십시오fwrite(STDERR, print_r($myDebugVar, TRUE));
이 행동은 의도적입니다 ( jasonbar 가 지적했듯이 ). 매뉴얼의 충돌 상태 가 PHPUnit 에보고 되었습니다 .
해결 방법은 PHPUnit이 예상 출력이 비어 있는지 (사실 출력이있을 때) 비어 있다고 가정하여 예기치 않은 출력이 표시되도록하는 것입니다.
class theTest extends PHPUnit_Framework_TestCase
{
/**
* @outputBuffering disabled
*/
public function testOutput() {
$this->expectOutputString(''); // tell PHPUnit to expect '' as output
print_r("Hello World");
print "Ping";
echo "Pong";
$out = "Foo";
var_dump($out);
}
}
제공합니다 :
PHPUnit @package_version@ by Sebastian Bergmann.
F
Time: 1 second, Memory: 3.50Mb
There was 1 failure:
1) theTest::testOutput
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-''
+'Hello WorldPingPongstring(4) "Foo"
+'
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
출력 어설 션을 테스트하기 전에 테스트에 실패한 다른 어설 션을 비활성화해야합니다 (따라서 출력이 표시되지 않음).
답변
사용해보십시오 --debug
포함 또는 소스 데이터 파일의 올바른 경로를 얻으려고 할 때 유용합니다.
답변
버그는 아니지만 의도적입니다. 가장 좋은 방법은 어떤 종류의 로그 파일에 쓰고 로그를 출력하여 출력을 감시하는 것입니다.
또한:
참고 : PHPUnit은 테스트 실행 중 발생하는 모든 출력을 삼킨다는 점에 유의하십시오. 엄격 모드에서는 출력을 방출하는 테스트가 실패합니다.
답변
VisualPHPUnit 과 함께 운이 좋으며 무엇보다도 출력을 유용하게 보여줍니다.
class TestHello extends PHPUnit_Framework_TestCase
{
public function test_Hello()
{
print "hello world";
}
}
답변
의도를 생각해야합니다. 테스트를 수정하기 위해 디버깅 할 때 정보가 필요하면 테스트가 중단 될 때 다음 주에 다시 정보가 필요합니다.
이것은 테스트가 실패 할 때 항상 정보가 필요하다는 것을 의미합니다 var_dump
. 원인을 찾기 위해를 추가하는 것은 너무 많은 작업입니다. 오히려 데이터를 어설 션에 넣습니다.
코드가 너무 복잡하면 사용자 지정 메시지가있는 하나의 어설 션이 코드의 위치, 이유 및 방법을 알 수있는 수준을 알 수있는 수준에 도달 할 때까지 코드를 분할하십시오.
답변
laravel 5에서는 dump ()를 사용할 수 있으며 마지막 응답에서 내용을 덤프합니다.
class ExampleTest extends TestCase{
public function test1()
{
$this->post('/user', ['name' => 'Gema']);
$this->dump();
}
}