PHPUnit의 데이터 공급자

3172 단어 phplaravel
Laravel을 사용하여 Salary Calculator for Germany을 빌드할 때 PHPUnit을 사용하여 단위 테스트로 코드를 다루기 시작했습니다. 이것은 계산을 신뢰할 수 있었기 때문에 더 많은 엣지 케이스를 다루어야 할 때 특히 유용했습니다. 그때까지 몰랐던 기능 중 하나가 Data Providers in PHPUnit 이었습니다.

데이터 공급자란 무엇입니까?



메서드 또는 클래스에 대한 테스트를 작성할 때 동일한 코드에 대한 값을 사용하여 여러 어설션을 작성합니다. 데이터 공급자는 모든 변경 사항이 메서드에 전달된 값일 때 유용합니다.

DataProviders are a framework for easily controlling how data can be provided from a source



데이터 공급자 없이 테스트를 작성하는 방법에 대한 예를 들어 보겠습니다. 숫자를 합산하여 값을 반환하는 클래스add($a, $b)에 메서드Operations가 있다고 가정합니다.

    public function test_add()
    {
        $actual = (new Operations)->add(1, 2);
        $this->assertEquals(3, $actual);
    }



여러 주장을 추가하려는 경우 다음과 같이 다른 주장을 추가하고 싶을 것입니다.

    public function test_add()
    {
        $actual = (new Operations)->add(1, 2);
        $this->assertEquals(3, $actual);

        $actual = (new Operations)->add(3, 4);
        $this->assertEquals(7, $actual);
    }

    // Or a test per method
    public function test_add_first()
    {
        $actual = (new Operations)->add(1, 2);
        $this->assertEquals(3, $actual);
    }

    public function test_add_second()
    {
        $actual = (new Operations)->add(3, 4);
        $this->assertEquals(7, $actual);
    }





메서드의 서명이 변경되거나 더 많은 사례를 다루려는 경우 오버헤드가 추가됩니다.

PHPUnit에서 데이터 공급자를 사용하는 방법



데이터 공급자는 이를 단순화하여 동일한 테스트에 대해 여러 값 집합을 전달할 수 있습니다. 공식 문서에서:

데이터 공급자 방법
  • public여야 합니다.
  • 배열의 배열 또는 Iterator 인터페이스를 구현하고 각 반복 단계에 대한 배열을 생성하는 객체를 반환합니다.

  • 데이터 공급자를 사용하여 기존 테스트 사례를 변환해 보겠습니다. 데이터 공급자 이름 뒤에 dataProvider 주석을 사용합니다.

    /**
    * @dataProvider addProvider
    */
    public function test_add($a, $b, $expected)
    {
        $actual = (new Operations)->add($a, $b);
            $this->assertEquals($expected, $actual);
    }
    
    public function addProvider()
    {
        return array(
                array(1, 2, 3),
                array(4, 5, 7),
        );
    }
    
    


    이 경우 PHPUnit은 배열을 전달하고 항목을 반복하고(다시 배열) 메소드 매개변수의 위치에 따라 인수를 전달합니다.

    첫 번째 항목의 경우 array(1, 2, 3) , test_add(1, 2, 3) 를 호출하고 어설션의 유효성을 검사합니다. 그런 다음 다음 항목 등등.

    PHPUnit의 인라인 데이터 공급자



    데이터 공급자가 있는 위의 테스트 사례에서 데이터 공급자를 인라인하여 훨씬 더 단순화할 수 있습니다. 사용할 주석은 testWith입니다.


    /**
    * @testWith array(
                array(1, 2, 3),
                array(4, 5, 7),
        );
    */
    public function test_add($a, $b, $expected)
    {
        $actual = (new Operations)->add($a, $b);
            $this->assertEquals($expected, $actual);
    }
    
    

    좋은 웹페이지 즐겨찾기