찾다

 >  Q&A  >  본문

PHPUnit에서 클래스의 일부가 아닌 함수를 모의하는 방법은 무엇입니까?

현재 작업 중인 프로젝트에는 객체 지향 및 절차적 PHP 코드가 혼합되어 있습니다. 그래서 나는 다음과 같은 것을 가지고 있습니다:

으아악

이러한 종속성은 몇 가지 있지만 매우 적습니다(한 손으로 셀 수 있습니다). 하지만 (PHPUnit을 사용하여) 클래스에 대한 단위 테스트를 작성해야 하는데 터미널에서 함수를 모의하는 방법을 모릅니다(이 경우 doStuff). 내가 아는 한, PHPUnit의 조롱 기능은 클래스에서만 작동합니다.

모의 없이 했을 텐데, 문제는 이러한 함수 중 일부가 일부 IO 작업을 수행한다는 점입니다. 어떤 식으로든 이를 모의하지 않는 것은 좋은 생각이 아닌 것 같습니다.

이 문제를 어떻게 해결할 수 있나요?

P粉216807924P粉216807924411일 전689

모든 응답(2)나는 대답할 것이다

  • P粉275883973

    P粉2758839732023-10-30 09:33:53

    제가 볼 수 있는 유일한 옵션은 종속성 주입입니다. 클래스가 클래스 외부의 리소스를 사용하기를 원하기 때문입니다. 따라서 이는 일부 캡슐화 규칙을 위반합니다.

    과거에 제가 이 작업을 수행한 방법은 이러한 함수를 자체 클래스에 넣고 이를 요구/포함하고, 테스트 변수를 설정할 때 알려진 상태를 반환하는 동일한 세미 "모의" 함수가 있는 기본 파일을 포함하는 것이었습니다. .

    나의 다른 접근 방식은 이러한 모든 데이터 함수를 포함하는 간단한 UTILITY 클래스를 만든 다음 종속성 주입 및 모의를 사용하여 테스트하는 것입니다.

    으아악

    테스트:

    으아악

    회신하다
    0
  • P粉155832941

    P粉1558329412023-10-30 00:12:07

    네임스페이스(전역 네임스페이스에 정의됨)에서 함수를 호출할 때 PHP의 네임스페이스 대체 정책을 활용하고 항상 정규화되지 않은 함수를 호출할 수 있습니다.

    이를 통해 호출자의 네임스페이스 내에서 함수를 제공하여 모의 객체를 만들 수 있습니다.

    여러분의 삶을 특히 쉽게 만들기 위해 PHPUnit과 함께 사용할 수 있는 라이브러리 php-mock- phpunit에 패키지했습니다.

    으아악

    회신하다
    0
  • 취소회신하다