Tôi bắt đầu làm việc với Silex và nó rất tuyệt. Vấn đề xuất hiện khi cố gắng kiểm tra các lớp của tôi đúng cách. Cụ thể là đóng cửa: ( Trong các dòng sau đây tôi giải thích vấn đề của mình để xem liệu có ai trong số các bạn biết cách giải quyết nó không.) Xin vui lòng, không tập trung vào cú pháp mà là tập trung vào vấn đề thử nghiệm. này:Thử nghiệm trong Silex (đóng cửa mô hình) bằng cách sử dụng PHPUnit
<?php
namespace Foo\Provider;
use Silex\Application;
use Silex\ServiceProviderInterface;
use Foo\Bar;
class BarProvider implements ServiceProviderInterface {
public function register(Application $app) {
$app[ 'foo_bar' ] = $app->protect(function() use ($app) {
return new Bar($app);
});
}
public function boot(Application $app) {}
}
Sau đó, tôi cần phải nhận được một thể hiện của các yếu tố foo_bar:.
<?php
namespace Foo;
use Silex\Application;
class Clazz {
protected $bar;
public function __construct(Application $app) {
$this->bar = $app[ 'foo_bar' ]();
}
}
này chỉ hoạt động tốt Cái này là tôi đang phát triển sử dụng TDD (và PHPUnit) và tôi không thể kiểm tra thích hợp lớp Clazz.
<?php
namespace Foo\Test;
use PHPUnit_Framework_TestCase;
use Silex\Application;
use Foo\Bar;
use Foo\Clazz;
class ClazzTest extends PHPUnit_Framework_TestCase {
public function testConstruct() {
$mock_bar = $this->getMock('Foo\Bar');
$mock_app = $this->getMock('Silex\Application');
$mock_app
->expects($this->once())
->method('offsetGet')
->with('foo_bar')
->will($this->returnValue($mock_bar));
new Class($mock_app);
}
}
Sự cố ở đây nằm trong "()" sau $ app ['foo_bar'] trong lớp Clazz. Khi cố thực hiện kiểm tra, tôi nhận được lỗi "Lỗi nghiêm trọng về PHP: Tên hàm phải là một chuỗi trong ...". Tôi hiểu rằng tôi không thể đơn vị kiểm tra lớp theo cách này nhưng tôi không thấy cách thích hợp để làm điều đó.
Làm cách nào tôi có thể kiểm tra câu lệnh này (vì ở cuối câu lệnh phức tạp duy nhất là $ this-> bar = $ app 'foo_bar';)?
Có lẽ github sẽ cung cấp cho bạn một số nguồn cảm hứng: https://github.com/fabpot/Silex/tree/master/tests/Silex/Tests – qrazi
Tôi đã thử điều đó nhưng không thể tìm thấy một ví dụ hay: ( – ThisIsErico