Hướng dẫn phpunit teardown after all tests - phpunit teardown sau tất cả các thử nghiệm

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 chính xác.

Nếu bạn giống tôi, "bà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 bạn tại một cơ sở dữ liệu cho tất cả các bài kiểm tra. Tôi liên tục thay đổi các tệp di chuyển vào 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 bài kiểm tra.

Việc 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 bài kiểm tra.

Sau đó, tôi cần xây dựng cơ sở dữ liệu thử nghiệm từng phần. Tôi cần viết một bài kiểm tra đơn hàng, nhưng trước tiên tôi cần tạo một số sản phẩm và kiểm tra điều đó, sau đó tôi cần kiểm tra một kết quả nhập khẩu.

Vì vậy, những gì tôi đã làm là siêu dễ dàng, nhưng không được giải thích cực kỳ 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 phpspec.xml của bạn, thêm một testsuite ....


    tests/in/SystemSetupTest.php
    tests/in/ProductTest.php
    tests/in/ProductImportTest.php

Và trong 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 thi nó như:

PHPUNIT -Các sản phẩm thử nghiệm

Cuối cùng, nó dễ dàng hơn. Nó sẽ cho phép tôi xây dựng hệ thống của mình 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 đề về Bootstrap, mà tôi chắc chắn rằng 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.

Một trong những phần tốn nhiều thời gian nhất của các bài kiểm tra viết là viết mã để thiết lập thế giới ở trạng thái đã biết và sau đó đưa nó trở lại trạng thái ban đầu khi bài kiểm tra hoàn tất. Trạng thái được biết đến này được gọi là vật cố của bài kiểm tra.

Trong thử nghiệm các hoạt động mảng với phpunit, vật cố là mảng được lưu trữ trong biến $stack. Tuy nhiên, hầu hết thời gian, vật cố sẽ phức tạp hơn một mảng đơn giản và lượng mã cần thiết để thiết lập nó sẽ phát triển tương ứng. Nội dung thực tế của bài kiểm tra bị mất trong tiếng ồn khi thiết lập vật cố. Vấn đề này thậm chí còn tồi tệ hơn khi bạn viết một số bài kiểm tra với đồ đạc tương tự. Nếu không có một số trợ giúp từ khung thử nghiệm, chúng tôi sẽ phải sao chép mã thiết lập vật cố cho mỗi bài kiểm tra chúng tôi viết.Testing array operations with PHPUnit, the fixture was the array that is stored in the $stack variable. Most of the time, though, the fixture will be more complex than a simple array, and the amount of code needed to set it up will grow accordingly. The actual content of the test gets lost in the noise of setting up the fixture. This problem gets even worse when you write several tests with similar fixtures. Without some help from the testing framework, we would have to duplicate the code that sets up the fixture for each test we write.

PHPUNIT hỗ trợ chia sẻ mã thiết lập. Trước khi một phương thức kiểm tra được chạy, một phương thức mẫu gọi là

class SystemSetupTest extends ApiTester
{

    /** @test */
    function system_init[]
    {
        fwrite[STDOUT, __METHOD__ . "\n"];
        self::createEM[]; //this has all the code to init the system...
    }
}
0 được gọi.
class SystemSetupTest extends ApiTester
{

    /** @test */
    function system_init[]
    {
        fwrite[STDOUT, __METHOD__ . "\n"];
        self::createEM[]; //this has all the code to init the system...
    }
}
0 là nơi bạn tạo các đối tượng mà bạn sẽ kiểm tra. Khi phương thức kiểm tra đã hoàn thành chạy, cho dù nó thành công hay thất bại, một phương thức mẫu khác được gọi là
class SystemSetupTest extends ApiTester
{

    /** @test */
    function system_init[]
    {
        fwrite[STDOUT, __METHOD__ . "\n"];
        self::createEM[]; //this has all the code to init the system...
    }
}
2 được gọi.
class SystemSetupTest extends ApiTester
{

    /** @test */
    function system_init[]
    {
        fwrite[STDOUT, __METHOD__ . "\n"];
        self::createEM[]; //this has all the code to init the system...
    }
}
2 là nơi bạn làm sạch các đối tượng mà bạn đã thử nghiệm.

Khi sử dụng chú thích @depends để thể hiện sự phụ thuộc, chúng tôi đã sử dụng mối quan hệ người tiêu dùng nhà sản xuất giữa các thử nghiệm để chia sẻ một trận đấu. Điều này không phải lúc nào cũng mong muốn hoặc thậm chí có thể. Ví dụ 4.1 cho thấy cách chúng ta có thể viết các bài kiểm tra của

class SystemSetupTest extends ApiTester
{

    /** @test */
    function system_init[]
    {
        fwrite[STDOUT, __METHOD__ . "\n"];
        self::createEM[]; //this has all the code to init the system...
    }
}
4 theo cách mà không phải bản thân được sử dụng lại mà là mã tạo ra nó. Đầu tiên chúng tôi khai báo biến thể hiện, $stack, mà chúng tôi sẽ sử dụng thay vì biến phương pháp địa phương. Sau đó, chúng tôi đặt việc tạo ra vật cố
class SystemSetupTest extends ApiTester
{

    /** @test */
    function system_init[]
    {
        fwrite[STDOUT, __METHOD__ . "\n"];
        self::createEM[]; //this has all the code to init the system...
    }
}
6 vào phương pháp
class SystemSetupTest extends ApiTester
{

    /** @test */
    function system_init[]
    {
        fwrite[STDOUT, __METHOD__ . "\n"];
        self::createEM[]; //this has all the code to init the system...
    }
}
0. Cuối cùng, chúng tôi loại bỏ mã dự phòng khỏi các phương thức thử nghiệm và sử dụng biến thể hiện mới được giới thiệu,
class SystemSetupTest extends ApiTester
{

    /** @test */
    function system_init[]
    {
        fwrite[STDOUT, __METHOD__ . "\n"];
        self::createEM[]; //this has all the code to init the system...
    }
}
8, thay vì biến phương pháp địa phương $stack với phương thức khẳng định

Chủ Đề