Hướng dẫn phpunit doesnotperformassertions - phpunit không thực hiện xác nhận

Hướng dẫn phpunit doesnotperformassertions - phpunit không thực hiện xác nhận

Hướng dẫn phpunit doesnotperformassertions - phpunit không thực hiện xác nhận

Hướng dẫn phpunit doesnotperformassertions - phpunit không thực hiện xác nhận

Hướng dẫn phpunit doesnotperformassertions - phpunit không thực hiện xác nhận

Hướng dẫn dùng wuizz trong PHP

Nội dung chínhGiới thiệuTrước khi bắt đầuCài đặt PHPUNITChạy PHPUnitCấu trúc project Cấu hình file phpunit.xmlCONVENTIONSCấu trúc và tên fileTên các method ...

Hướng dẫn phpunit doesnotperformassertions - phpunit không thực hiện xác nhận

Hướng dẫn dùng qizz com trong PHP

Nội dung chínhGiới thiệuTrước khi bắt đầuCài đặt PHPUNITChạy PHPUnitCấu trúc project Cấu hình file phpunit.xmlCONVENTIONSCấu trúc và tên fileTên các method ...

Hướng dẫn phpunit doesnotperformassertions - phpunit không thực hiện xác nhận

Hướng dẫn dùng qizz com trong PHP

Hướng dẫn assert no exception phpunit

Hướng dẫn phpunit doesnotperformassertions - phpunit không thực hiện xác nhận

PHP 7.4 and PHPUnit 9Using the PHPUnit homepage example (https://phpunit.de/getting-started/phpunit-9.html):private function ensureIsValidEmail(string $email): void { if (!filter_var($email, ...

Hướng dẫn dùng asssert trong PHP

Hướng dẫn phpunit doesnotperformassertions - phpunit không thực hiện xác nhận

Trong bài đầu tiên của series này, chúng ta đã đi qua cách cài đặt và cấu hình PHPUnit cho 1 project PHP, một số conventions khi thực hiện Unit test trong PHP và trải ...

Hướng dẫn dùng asssert trong PHP

Hướng dẫn phpunit doesnotperformassertions - phpunit không thực hiện xác nhận

Hướng dẫn phpunit doesnotperformassertions - phpunit không thực hiện xác nhận

Trong bài đầu tiên của series này, chúng ta đã đi qua cách cài đặt và cấu hình PHPUnit cho 1 project PHP, một số conventions khi thực hiện Unit test trong PHP và trải ...

Hướng dẫn dùng asssert trong PHP

Hướng dẫn phpunit doesnotperformassertions - phpunit không thực hiện xác nhận

Trong bài đầu tiên của series này, chúng ta đã đi qua cách cài đặt và cấu hình PHPUnit cho 1 project PHP, một số conventions khi thực hiện Unit test trong PHP và trải ...

Hướng dẫn dùng asssert trong PHP

Php 7.4 và Phpunit 9

Sử dụng ví dụ về trang chủ PHPUNIT (https://phpunit.de/getting-started/phpunit-9.html):

private function ensureIsValidEmail(string $email): void
{
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidArgumentException(
            sprintf(
                '"%s" is not a valid email address',
                $email
            )
        );
    }
}

Trang chủ cũng chỉ cho chúng tôi cách kiểm tra ngoại lệ được ném bằng phương pháp expectException():

public function testCannotBeCreatedFromInvalidEmailAddress(): void
{
    $this->expectException(InvalidArgumentException::class);

    Email::fromString('invalid');
}

Thật tuyệt. Nhưng điều gì sẽ xảy ra nếu tôi muốn kiểm tra ngoại lệ không được đưa ra cho đầu vào hợp lệ?not thrown given valid input ?

Nhìn vào các tài liệu (https://phpunit.readthedocs.io/en/9.3/writing-tests-for-phpunit.html#testing-exceptions) Dường như không đề cập đến phương pháp nghịch đảo với expectException()?

Tôi nên tiếp cận điều này như thế nào?

Chỉnh sửa để thêm:

Chỉ cần làm cho nó hoàn toàn rõ ràng, tôi đang tìm cách kiểm tra một kịch bản Email::fromString('');, tức là ngoại lệ không bị ném.not thrown.

Đã hỏi ngày 1 tháng 9 năm 2020 lúc 20:35Sep 1, 2020 at 20:35

Mã số ít mã hóaLittle Code

1.2352 huy hiệu vàng13 Huy hiệu bạc34 Huy hiệu đồng2 gold badges13 silver badges34 bronze badges

1

Nếu một ngoại lệ chưa từng thấy hoặc bất ngờ được ném, bài kiểm tra sẽ thất bại. Bạn không cần phải làm bất cứ điều gì đặc biệt, chỉ cần chạy mã đang được kiểm tra. Nếu không có xác nhận nào khác trong phương pháp kiểm tra, bạn cũng sẽ phải thực hiện $this->expectNotToPerformAssertions(); hoặc bạn sẽ nhận được cảnh báo rằng bài kiểm tra không thực hiện bất kỳ xác nhận nào.

public function testCannotBeCreatedFromInvalidEmailAddress(): void
{
    $this->expectNotToPerformAssertions();
    Email::fromString('invalid'); // If this throws an exception, the test will fail.
}

Đã trả lời ngày 1 tháng 9 năm 2020 lúc 20:39Sep 1, 2020 at 20:39

Alex Howanskyalex HowanskyAlex Howansky

47.6K8 Huy hiệu vàng74 Huy hiệu bạc95 Huy hiệu Đồng8 gold badges74 silver badges95 bronze badges

2

Không phải là câu trả lời bạn đang tìm kiếm? Duyệt các câu hỏi khác được gắn thẻ phpunit hoặc đặt câu hỏi của riêng bạn.

Tôi đã tái cấu trúc một cơ sở mã PHP cũ và bao gồm viết các bài kiểm tra mới. Trong khi làm điều đó, tôi đã tìm thấy một phương thức lớp chỉ chấp nhận một tập hợp các giá trị được xác định trước và từ chối bất kỳ giá trị nào khác bằng cách ném một ngoại lệ. Dưới đây là một đại diện đơn giản hóa của lớp này:



class MyClass
{
    protected $value;

    public function setValue($value)
    {
        if (in_array($value, ['foo', 'bar'])) {
            $this->value = $value;
            return $this;
        }

        throw new RuntimeException("{$value} is not a valid value.");
    }
}

Ngay lập tức, tôi đã viết một bài kiểm tra để kiểm tra xem phương thức có lọc ra các giá trị đầu vào không hợp lệ không:



use PHPUnit\Framework\TestCase;

class MyTestCase extends TestCase
{
    protected $instance;

    public function setUp()
    {
        $this->instance = new MyClass();
    }

    public function testSetValueRefusesBadInput()
    {
        $this->expectException(RuntimeException::class);
        $this->instance->setValue('baz');
    }
}

Dễ như ăn bánh.

Nhưng điều gì sẽ xảy ra nếu phương thức không xử lý các giá trị đầu vào hợp lệ một cách chính xác? Vì phương thức chỉ chấp nhận một tập hợp nhỏ các giá trị, chúng tôi có thể kiểm tra tất cả chúng. Tuy nhiên, PHPUNIT 6 không có xác nhận

public function testCannotBeCreatedFromInvalidEmailAddress(): void
{
    $this->expectException(InvalidArgumentException::class);

    Email::fromString('invalid');
}
0, cũng không cho phép kiểm tra mà không cần xác nhận.valid input values correctly? Since the method accepts only a small set of values, we could test all of them. However, PHPUnit 6 doesn’t have a
public function testCannotBeCreatedFromInvalidEmailAddress(): void
{
    $this->expectException(InvalidArgumentException::class);

    Email::fromString('invalid');
}
0 assertion, nor does it allow a test without an assertion.

Chúng ta có thể dễ dàng khắc phục những hạn chế này bằng cách thêm một xác nhận vào cuối thử nghiệm (

public function testCannotBeCreatedFromInvalidEmailAddress(): void
{
    $this->expectException(InvalidArgumentException::class);

    Email::fromString('invalid');
}
1) hoặc bằng cách tăng số lượng xác nhận (
public function testCannotBeCreatedFromInvalidEmailAddress(): void
{
    $this->expectException(InvalidArgumentException::class);

    Email::fromString('invalid');
}
2). Nếu việc thực hiện phương thức
public function testCannotBeCreatedFromInvalidEmailAddress(): void
{
    $this->expectException(InvalidArgumentException::class);

    Email::fromString('invalid');
}
3 không chính xác, một ngoại lệ sẽ được ném, nếu không, khẳng định sẽ được tính đến và PHPUNIT sẽ không phàn nàn về thử nghiệm.



use PHPUnit\Framework\TestCase;

class MyTestCase extends TestCase
{
    protected $instance;

    public function setUp()
    {
        $this->instance = new MyClass();
    }

    public function testSomethingWorks()
    {
        $this->instance->setValue('bar');
        $this->addToAssertionCount(1);
    }

    public function testAnotherThingWorks()
    {
        $this->instance->setValue('foo');
        $this->assertTrue(true);
    }
}