2009-11-30 5 views
7

입력 및 예상 출력이있는 데이터 파일이 있습니다. 예를 들면 다음과 같습니다.데이터 파일에서 PHPUnit 테스트를 동적으로 작성하십시오.

input: output: 
2  3 
3  5 
4  Exception 
5  8 
...  ... 

현재 데이터 파일을 읽고 각 {input, output} 쌍에 대해 테스트를 수행하는 사용자 정의 솔루션이 있습니다. 이것을 PHPUnit 기반 솔루션으로 변환하고 싶습니다. 테스트 이름 forXassertY을 사용하여 입력마다 하나의 테스트를하고 싶습니다. 따라서 처음 세 테스트는 for2assert3(), for3assert5() 및 for4assertException()이라고합니다.

테스트 메소드를 동적으로 생성하고 데이터 파일을 이러한 테스트의 기초로 유지할 수 있다면 기존 데이터를 테스트로 변환하고 싶지 않습니다. PHPUnit으로 변환하고 나중에 다른 테스트를 추가하고 Hudson을 사용하여 출력을 처리하고 봅니다.

제안 사항?

답변

0

글쎄 PHP 파일은 텍스트 파일 일 뿐이므로 데이터 파일을 읽고 .php 테스트 파일을 뱉어내는 TestGenerator.php 스크립트를 작성할 수 있습니다. Test Generator 스크립트는 "라인을 읽고, 구문 분석하고, PHP를 내뱉습니다"와 같이 간단합니다. 그런 다음 테스트 생성기 스크립트를 빌드/테스트 실행 프로세스의 일부로 실행하면됩니다.

<?php 

require_once 'PHPUnit/Framework/TestCase.php'; 

class ProviderTest extends PHPUnit_Framework_TestCase 
{ 
    public function testCaseProvider() 
    { 
     // parse your data file however you want 
     $data = array(); 
     foreach (file('test_data.txt') as $line) { 
      $data[] = explode("\t", trim($line)); 
     } 

     return $data; 
    } 

    /** 
    * @dataProvider testCaseProvider 
    */ 
    public function testAddition($num1, $num2, $expectedResult) 
    { 
     $this->assertEquals($expectedResult, $num1 + $num2); 
    } 
} 

?> 

을하고 test_data.txt 파일은 다음과 같이 보입니다 :

10

이에 대한 phpunit을의 data providers을 사용할 수 있습니다

$ phpunit ProviderTest.php 
PHPUnit 3.4.12 by Sebastian Bergmann. 

...F 

Time: 0 seconds, Memory: 5.75Mb 

There was 1 failure: 

1) ProviderTest::testAddition with data set #2 ('3', '5', '7') 
Failed asserting that two strings are equal. 
--- Expected 
+++ Actual 
@@ @@ 
-7 
+8 

/Users/dana/ProviderTest.php:23 

FAILURES! 
Tests: 4, Assertions: 3, Failures: 1. 
:

1 2 3 
2 2 4 
3 5 7 

그런 다음 테스트를 실행을

관련 문제