phpunit을 이용한 단위 테스트

phpunit을 이용한 단위 테스트

이 튜토리얼에서는 PHP 8.1 또는 PHP 8.2를 사용한다고 가정합니다. 간단한 단위 테스트를 작성하는 방법과 PHPUnit을 다운로드하고 실행하는 방법을 배우게 됩니다.

PHPUnit 10에 대한 문서는 여기에 있습니다.

다운로드: 다음 두 가지 방법 중 하나를 사용할 수 있습니다.

1. PHP 아카이브(PHAR)

우리는 PHPUnit 10을 사용하는 데 필요한 모든 것이 포함된 PHP 아카이브(PHAR)를 배포합니다 . 여기에서 다운로드하여 실행 가능하게 만드세요.

wget -O phpunit https://phar.phpunit.de/phpunit-10.phar
➜ chmod +x phpunit
➜ ./phpunit --version
PHPUnit 10.0.0 by Sebastian Bergmann and contributors.

2.작곡가

Composer를 사용하여 프로젝트에 로컬, 프로젝트별, 개발 시간 종속성으로 PHPUnit을 추가할 수 있습니다.

➜ composer require --dev phpunit/phpunit ^10./vendor/bin/phpunit --version
PHPUnit 10.0.0 by Sebastian Bergmann and contributors.

위에 표시된 예에서는 작곡가가 $PATH에 있다고 가정합니다.

Composer.json다음과 같아야 합니다.

{
    
    
    "autoload": {
    
    
        "classmap": [
            "src/"
        ]
    },
    "require-dev": {
    
    
        "phpunit/phpunit": "^10"
    }
}

코드

src/Email.php

<?php 
declare(strict_types=1);
final class Email
{
    
    
    private string $email;
    private function __construct(string $email)
    {
    
    
        $this->ensureIsValidEmail($email);
        $this->email = $email;
    }
    public static function fromString(string $email): self
    {
    
    
        return new self($email);
    }
    public function asString(): string
    {
    
    
        return $this->email;
    }
    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
                )
            );
        }
    }
}

테스트 코드

테스트/EmailTest.php

<?php 
declare(strict_types=1);
use PHPUnit\Framework\TestCase;
final class EmailTest extends TestCase
{
    
    
    public function testCanBeCreatedFromValidEmail(): void
    {
    
    
        $string = '[email protected]';
        $email = Email::fromString($string);
        $this->assertSame($string, $email->asString());
    }
    public function testCannotBeCreatedFromInvalidEmail(): void
    {
    
    
        $this->expectException(InvalidArgumentException::class);
        Email::fromString('invalid');
    }
}

테스트 실행: 다음 두 가지 방법 중 하나를 사용할 수 있습니다.

1. PHP 아카이브(PHAR)

./phpunit --bootstrap src/autoload.php tests
PHPUnit 10.0.0 by Sebastian Bergmann and contributors.
..                                        2 / 2 (100%)
Time: 70 ms, Memory: 10.00MB
OK (2 tests, 2 assertions)

위의 내용은 phpunit.phar을 다운로드하여 $PATH에 phpunit으로 넣었으며 src/autoload.php가 테스트 중인 클래스에 대한 자동 로딩을 설정하는 스크립트라고 가정합니다. 이러한 스크립트는 일반적으로 phpab과 같은 도구를 사용하여 생성됩니다.

--bootstrap src/autoload.php는 테스트를 실행하기 전에 PHPUnit 명령줄 테스트 실행기에 src/autoload.php를 포함하도록 지시합니다.test는
PHPUnit 명령줄 테스트 실행기에 *Test.php 소스 코드에 선언된 모든 테스트를 실행하도록 지시합니다. 테스트 디렉토리에 있는 파일입니다.

2.작곡가

./vendor/bin/phpunit tests
PHPUnit 10.0.0 by Sebastian Bergmann and contributors.
..                                        2 / 2 (100%)
Time: 70 ms, Memory: 10.00MB
OK (2 tests, 2 assertions)

위의 내용에서는 Vendor/autoload.php(Composer가 관리하는 자동 로더 스크립트)가 존재하고 Email 클래스에 대한 코드를 로드할 수 있다고 가정합니다. 자동 로드 설정 방법에 따라 지금 Composer dump-autoload를 실행해야 할 수도 있습니다.

테스트는 테스트 디렉토리의 Test.php 소스 코드 파일 에 선언된 모든 테스트를 실행하도록 PHPUnit 명령줄 테스트 실행기에 지시합니다 .

일부 테스트 구성 요소가 권장됩니다.

https://packagist.org/packages/mockery/mockery
phpunit/phpunit
fakerphp/faker
https://github.com/phpstan/phpstan
vimeo/psalm
mikey179/vfsstream
rector/rector

인용하다

선언과 strict_types

ps:선언(strict_types=1);

엄격한 타이핑
기본적으로 PHP는 가능한 경우 잘못된 유형의 값을 함수에서 예상하는 스칼라 유형으로 강제 변환합니다. 예를 들어, 함수의 매개변수가 문자열일 것으로 예상되지만 정수가 전달되는 경우 최종 함수는 문자열 유형의 값을 가져옵니다.
엄격 모드는 파일별로 활성화할 수 있습니다. 엄격 모드에서는 유형 선언과 정확히 일치하는 변수만 허용되며, 그렇지 않으면 TypeError가 발생합니다. 유일한 예외는 부동 소수점을 기대하는 함수에 정수를 전달할 수 있다는 것입니다.
선언문과 strict_types 문을 사용하여 엄격 모드를 활성화합니다
https://blog.csdn.net/joshua317/article/details/121252625

주장하다

연산자를 사용하여 신원 확인
두 변수가 서로 다른 유형과 값을 가지거나 두 변수가 동일한 개체를 참조하지 않는 경우
https://docs.phpunit.de/en/10.1/assertions.html#assertsame 로 식별된 오류를 보고합니다.

추천

출처blog.csdn.net/heshihu2019/article/details/132295983