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 trongapp/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 ...
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
@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
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