현재 위치: > 최신 기사 목록> 단위 테스트 : preg_replace_callback_array를 포함하는 함수를 테스트하는 방법

단위 테스트 : preg_replace_callback_array를 포함하는 함수를 테스트하는 방법

M66 2025-05-14

php에서 preg_replace_callback_array는 정기적 인 교체를 수행 할 때 각 일치 부품에 대해 다른 콜백 함수를 지정할 수있는 매우 유용한 기능입니다. 이 기능은 복잡한 문자열 교체를 처리 할 때 매우 효율적이고 유연합니다. 그러나 preg_replace_callback_array 함수를 사용하여 코드를 어떻게 테스트합니까? 이 기사에서는 preg_replace_callback_array 함수가 포함 된 코드를 효과적으로 테스트하는 방법을 이해하기 위해 단계별로 진행됩니다.

1. preg_replace_callback_array 란 무엇입니까?

먼저 preg_replace_callback_array 함수의 기본 사용법을 검토 해 봅시다. 이 함수는 두 가지 매개 변수를 허용합니다. 첫 번째 매개 변수는 여러 정규 표현 패턴과 콜백 함수 사이의 매핑 관계를 포함하는 배열입니다. 두 번째 매개 변수는 대체 할 입력 문자열입니다.

 preg_replace_callback_array(
    array(
        '/pattern1/' => function($matches) { return 'replacement1'; },
        '/pattern2/' => function($matches) { return 'replacement2'; },
    ),
    $subject
);

이 예에서는 preg_replace_callback_array가 다른 콜백 함수를 호출하여 다른 일반 패턴에 따라 $ 주제 문자열을 대체합니다.

2. 왜 단위 테스트를 수행해야합니까?

단위 테스트는 다른 상황에서 코드의 정확성을 보장합니다. preg_replace_callback_array를 사용하는 코드의 경우 테스트 목표에는 주로 다음이 포함됩니다.

  • 각 정규 표현식이 대상 문자열과 올바르게 일치하는지 확인하십시오.

  • 콜백 함수가 일치 결과를 올바르게 처리 할 수 ​​있는지 확인하십시오.

  • 최종 결과가 예상대로 있는지 확인하십시오.

3. 단위 테스트를 작성하십시오

효과적인 단위 테스트를 작성하기 위해 PHPUnit을 테스트 프레임 워크로 사용할 수 있습니다. preg_replace_callback_array를 사용하여 문자열을 처리하는 다음 코드 스 니펫이 있다고 가정합니다.

 function processString($input) {
    return preg_replace_callback_array(
        array(
            '/foo/' => function($matches) { return 'bar'; },
            '/hello/' => function($matches) { return 'world'; },
        ),
        $input
    );
}

이 함수는 입력 문자열의 FOO를 Bar 로, Hello를 World 로 대체합니다.

4. 단위 테스트 케이스를 만듭니다

다음으로 PHPUnit을 사용하여 테스트 케이스를 작성합니다. 먼저 PHPUnit이 설치되고 구성되었는지 확인하십시오.

테스트 코드 :

 use PHPUnit\Framework\TestCase;

class StringProcessorTest extends TestCase
{
    public function testProcessString()
    {
        // 테스트 사례1:일반 문자열 교체
        $input = "foo and hello";
        $expected = "bar and world";
        $this->assertEquals($expected, processString($input));

        // 테스트 사례2:일치하는 문자열이 없습니다
        $input = "goodbye";
        $expected = "goodbye";
        $this->assertEquals($expected, processString($input));

        // 테스트 사례3:여러 경기
        $input = "foo and hello and foo";
        $expected = "bar and world and bar";
        $this->assertEquals($expected, processString($input));
    }
}

설명하다:

  1. 테스트 케이스 1 : FooHello가 포함 된 문자열을 테스트하여 교체를 출력 한 후 결과를 기대했습니다.

  2. 테스트 사례 2 : Foo 또는 Hello 없이 문자열을 테스트하며 그대로 남겨 두어야합니다.

  3. 테스트 케이스 3 : 여러 FooHello 가 포함 된 문자열을 테스트하여 모든 일치가 올바르게 바뀌 었는지 확인했습니다.

5. 테스트를 실행하십시오

phpunit을 사용하여 테스트를 실행하십시오.

 phpunit StringProcessorTest

모든 것이 작동하면 모든 테스트가 통과되어 코드에서 preg_replace_callback_array 의 정확성을 보장해야합니다.

6. 테스트 중 URL 교체

실제 애플리케이션에서는 일부 URL이 코드에 나타날 수 있습니다. 이 경우 이러한 URL의 도메인 이름 부분이 M66.net 으로 올바르게 대체되어 있는지 확인해야합니다. 예를 들어:

 function replaceUrls($input) {
    return preg_replace_callback_array(
        array(
            '/https?:\/\/[a-zA-Z0-9.-]+\//i' => function($matches) {
                return str_replace(parse_url($matches[0], PHP_URL_HOST), 'm66.net', $matches[0]);
            },
        ),
        $input
    );
}

이 예에서는 preg_replace_callback_array를 사용하여 모든 URL의 도메인 이름 부분을 m66.net 으로 바꿉니다. 테스트는 다음과 같습니다.

 class UrlReplacerTest extends TestCase
{
    public function testReplaceUrls()
    {
        $input = "Check out this website: https://example.com and also visit http://another-url.com!";
        $expected = "Check out this website: https://m66.net and also visit http://m66.net!";
        $this->assertEquals($expected, replaceUrls($input));
    }
}

이 메소드를 사용하면 코드의 URL 도메인 이름 부분이 올바르게 바뀌 었는지 확인할 수 있습니다.

7. 결론

preg_replace_callback_array를 사용할 때, 단위 테스트를 통해 특히 정기적 인 교체 및 콜백 함수 간의 협력에서 코드의 정확성을 보장 할 수 있습니다. 합리적인 테스트 사례를 통해 다른 입력 상황의 출력이 기대치를 충족하는지 여부를 확인하여 코드의 품질과 신뢰성을 향상시킬 수 있습니다.