Tôi đã đến trang này với cùng một câu hỏi, tuy nhiên câu trả lời được chấp nhận được chạy trên tất cả các lớp và đối với tôi không phải là câu trả lời đúng.
Nếu bạn giống tôi, "Kiểm tra tích hợp" đầu tiên của bạn là xóa DB và chạy di chuyển. Điều này có được chính mình tại một đường cơ sở dữ liệu cho tất cả các thử nghiệm. Tôi liên tục thay đổi các tệp di chuyển tại thời điểm này, vì vậy việc thiết lập đường cơ sở thực sự là một phần của tất cả các thử nghiệm.
Quá trình di chuyển mất một lúc, vì vậy tôi không muốn nó chạy trên tất cả các thử nghiệm.
Sau đó, tôi cần xây dựng cơ sở dữ liệu kiểm tra từng phần. Tôi cần phải viết một kiểm tra đơn đặt hàng, nhưng trước tiên tôi cần phải tạo ra một số sản phẩm và kiểm tra đó, sau đó tôi cần phải kiểm tra một fuction nhập khẩu.
Vì vậy, những gì tôi đã làm là SUPER dễ dàng, nhưng không được giải thích rất tốt trên internet. Tôi đã tạo một thử nghiệm đơn giản để thiết lập cơ sở dữ liệu. Sau đó, trong tập tin phpspec.xml bạn thêm một TestSuite ....
<testsuite name="Products">
<file>tests/in/SystemSetupTest.php</file>
<file>tests/in/ProductTest.php</file>
<file>tests/in/ProductImportTest.php</file>
</testsuite>
Và trong các SystemSetupTest.php ....
class SystemSetupTest extends ApiTester
{
/** @test */
function system_init()
{
fwrite(STDOUT, __METHOD__ . "\n");
self::createEM(); //this has all the code to init the system...
}
}
sau đó thực hiện nó thích:
phpunit - -testsuite Sản phẩm
Cuối cùng, nó dễ hơn một tấn. Nó sẽ cho phép tôi xây dựng hệ thống của tôi một cách chính xác.
Ngoài ra tôi đang sử dụng laravel 5. Khi sử dụng setUpBeforeClass()
Tôi kết thúc với các vấn đề khởi động, mà tôi chắc chắn tôi có thể khắc phục, nhưng phương pháp tôi sử dụng ở trên hoạt động hoàn hảo.
Tôi hoàn toàn hiểu sự cần thiết phải làm điều này đôi khi để thực hiện. Bạn nên tránh điều này nếu có thể để bạn không chia sẻ trạng thái giữa các bài kiểm tra. –
@Greg: Tôi đồng ý. Tuy nhiên, có những tình huống tốt hơn để khởi tạo một lần cho tất cả các bài kiểm tra (ví dụ: để thiết lập kết nối với db). – snakile
Tôi cố gắng tránh yêu cầu một máy chủ DB bằng cách trộn bộ chuyển đổi Zend_Db/PDO trong bộ dữ liệu của tôi, sau đó tôi chạy các xác nhận về SQL mà các lớp của tôi tạo ra. Tôi đánh giá cao đôi khi nó không thể tránh khỏi cho các bài kiểm tra chức năng/end-to-end. –