2012-03-02 27 views
13
<phpunit backupGlobals="false" colors="true"> 
    <testsuite name="app1" > 
     <directory>./app1</directory> 
    </testsuite> 
    <testsuite name="app1" > 
     <directory>./app2</directory> 
    </testsuite> 
</phpunit> 

Làm cách nào để tôi có thể tải các bootuite đầu tiên và thứ hai khác nhau?PHPunit bootstrap khác nhau cho tất cả các testuites

Trả lời

2

Bạn không thể.

PHPUnit chỉ cho phép bạn chỉ định một tệp tin khởi động và bạn cần thiết lập mọi thứ để mỗi testuite có thể được thực hiện và PHPUnit không có cách chạy mã "setup" cho mỗi testsuite từ bootstrap xml tập tin.

Khi sử dụng, với phpunit 3.6 không khuyến khích, TestSuite các lớp bạn có thể làm trong đó nhưng đề xuất của tôi là chỉ chạy tất cả mã khởi động chung trong bootstrap.php và bạn cần thiết lập đặc biệt cho các thử nghiệm trong app1 và trong app2 để có một số App1_TestCase bạn được kế thừa từ đó.

Nên App1 thực sự là một ứng dụng hoàn toàn, tôi khuyên bạn nên có hai dự án riêng biệt với các thử nghiệm và mã thiết lập riêng của chúng và không cố chạy chúng trong một lần chạy phpunit.

11

Bạn có thể tạo ra hai tập tin bootstrap khác nhau và hai file cấu hình xml khác nhau

app1.xml

<phpunit bootstrap="app1BootstrapFile.php" colors="true"> 
    <testsuite name="app1" > 
     <directory>./app1</directory> 
    </testsuite> 
</phpunit> 

app2.xml

<phpunit bootstrap="app2BootstrapFile.php" backupGlobals="false" colors="true"> 
    <testsuite name="app2" > 
     <directory>./app2</directory> 
    </testsuite> 
</phpunit> 

Để chạy:

$phpunit --configuration app1.xml app1/ 
$phpunit --configuration app2.xml app2/ 

Nếu bạn chạy một rất nhiều thử nghiệm hơn người kia (nói app1), đặt tên cho phpunit.xml xml và bạn chỉ có thể chạy

$phpunit app1/ 
$phpunit --configuration app2.xml app2/ 

Tôi làm điều này với các bài kiểm tra đơn vị/hội nhập.

+0

Tôi không nghĩ rằng đây là một ý tưởng tốt vì có 10 file bootstrap khác nhau mà bạn sẽ cần, dựa trên giải pháp của bạn, để tạo 10 tệp phpunitblabla.xml – smarber

13

Điều tôi đã làm là có Trình nghe.

phpunit.xml

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit bootstrap="./phpunit_bootstrap.php" 
    backupGlobals="false" 
    backupStaticAttributes="false" 
    verbose="true" 
    colors="true" 
    convertErrorsToExceptions="true" 
    convertNoticesToExceptions="true" 
    convertWarningsToExceptions="true" 
    processIsolation="false" 
    stopOnFailure="false" 
    syntaxCheck="true"> 
    <testsuites> 
     <testsuite name="unit"> 
      <directory>./unit/</directory> 
     </testsuite> 
     <testsuite name="integration"> 
      <directory>./integration/</directory> 
     </testsuite> 
    </testsuites> 
    <listeners> 
     <listener class="tests\base\TestListener" file="./base/TestListener.php"></listener> 
    </listeners> 
</phpunit> 

Sau đó TestListener.php

class TestListener extends \PHPUnit_Framework_BaseTestListener 
{ 
    public function startTestSuite(PHPUnit_Framework_TestSuite $suite) 
    { 
     if (strpos($suite->getName(),"integration") !== false) { 
      // Bootstrap integration tests 
     } else { 
      // Bootstrap unit tests 
     } 
    } 
} 
Các vấn đề liên quan