2012-03-08 11 views
9

Tôi có một lớp cơ bản GenericHelper.php trong thư mục Foo/BarBundle/HelperĐơn vị thử nghiệm một lớp dịch vụ symfony với phpunit

Tôi đã đăng ký nó như là một dịch vụ trong Foo/BarBundle/Resources/config/services.yml:

parameters: 
     generic_helper.class: Foo\BarBundle\Helper\GenericHelper 

    services: 
     generic_helper: 
      class: %generic_helper.class% 

và tôi có thể truy cập nó trong một bằng cách thực hiện các thao tác sau:

$helper = $this->getContainer()->get('generic_helper'); 

Bây giờ, tôi muốn kiểm tra đơn vị lớp đó bằng PHPUnit; Tôi có đoạn code sau (tương tự như http://symfony.com/doc/2.0/book/testing.html#unit-tests):

namespace Foo\BarBundle\Tests\Helper; 

    use Foo\BarBundle\Helper\GenericHelper; 

    class GenericHelperTest extends \PHPUnit_Framework_TestCase { 

     public function testSomeMethod() { 
      $helper = new GenericHelper(); //line 10 
      $this->assertEquals($helper->someMethod(), SOME_RESULT); 
     } 
    } 

Chạy kết quả PHPUnit trong các lỗi sau:

PHP Fatal error: Class 'Foo\BarBundle\Helper\GenericHelper' not found in /DIR/src/Foo/BarBundle/Tests/Helper/GenericHelperTest.php on line 10 

grepping cho 'GenericHelper' chỉ mang lại một vài kết quả:

  • Bản thân Lớp và lớp Bài kiểm tra
  • tệp services.yml
  • appDevDebugProjectContainer file trong app/cache/dev/, mà có tất cả các dịch vụ thu khí

Câu hỏi (s):

  • Liệu Symfony ngăn chặn PHPUnit từ trực tiếp xây dựng một lớp dịch vụ?
  • Có cách nào để thực hiện việc này mà không cần tạo Vùng chứa Symfony sau đó truy cập dịch vụ (như đã hoàn thành tại đây: Access Symfony 2 container via Unit test?)? Ý tôi là, nó vẫn chỉ là một lớp cơ bản ...
+0

Nó sẽ hoạt động, bạn có thể có điều gì đó sai với việc tự động tải các lớp học của bạn. Bạn có thể đăng tệp 'phpunit.xml' của mình không? – Matt

+0

@Matt Tôi chưa sửa đổi tệp 'phpunit.xml.dist' đi kèm với symfony, nhưng nhận xét của bạn đã giúp tôi bất kể - chạy phpunit với' -c app/'(thư mục với tệp dist) đã hoạt động. Tôi đoán nó đã làm với các tập tin bootstrap quy định trong vòng? Dù sao, cảm ơn! – pvilchez

+0

Có vì 'bootstrap.php.cache' sẽ bao gồm các công cụ tự động tải. Bạn nên đăng câu trả lời cho câu hỏi của bạn và chấp nhận câu trả lời khi bạn có thể (tôi nghĩ bạn phải đợi một vài thứ như hai ngày). – Matt

Trả lời

9

Chạy phpunit với trỏ -c cờ đến thư mục chứa các tập tin phpunit.xml.dist giải quyết vấn đề này. Thực hiện việc này bao gồm bootstrap.php.cache và do đó việc tải tự động là cần thiết.

Các vấn đề liên quan