PHPUnit은 왜 OO 방식으로 작업을 수행해야 한다고 주장합니까?

StackOverflow https://stackoverflow.com/questions/936204

  •  06-09-2019
  •  | 
  •  

문제

화상을 입을 위험이 있습니다..컨텍스트가 암시적인 컨텍스트에서 함수가 아닌 메서드에 대한 호출을 적용하면 어떤 이점이 있습니까?

PHP의 구문이 메소드 호출에 너무 추악하다는 점을 고려하면 PHPUnit 작성자가 왜 PHP를 사용하도록 강요했을까요?

프레임워크가 전역 "currentTestCase" 개체를 설정한 다음 실패한 어설션을 해당 개체와 투명하게 연결했다면 다음과 같이 작성할 수 있습니다.

assertEquals("blah", $text);

동등한 것과 반대이지만 장황합니다.

$this->assertEquals("blah", $text);

이 맥락에서 OO를 사용하면 정확히 무엇을 얻을 수 있습니까?

저에게 계몽해주세요.

도움이 되었습니까?

해결책

phpunit은 Xunit에서 파생 되었기 때문에 xunit 그렇게합니다.

Xunit은 왜 그렇게 하는가? 당신이 물었을 때 기뻐요. Robert가 지적한 바와 같이 원래 이유는 Xunit이 Smalltalk에서 나와 Java의 Junit에 의해 대중화 되었기 때문입니다. 둘 다 oo-or nothing 언어이므로 선택의 여지가 없었습니다.

이것은 다른 이점이 없다고 말하는 것이 아닙니다. OO 테스트를 상속받을 수 있습니다. 즉, 서브 클래스를 테스트하려면 모든 부모의 테스트를 실행하고 변경된 동작에 대한 소수의 테스트 방법을 무시할 수 있습니다. 이를 통해 테스트 코드를 복제 할 필요없이 서브 클래스를 탁월한 적용 범위를 제공합니다.

PHPUNIT에서 Asser Method를 추가하고 무시할 수 있습니다. 서브 클래스 PHPUnit_Framework_TestCase, 직접 쓰십시오 assert 방법과 테스트 클래스가 새 서브 클래스에서 상속 받도록하십시오. 기본값도 작성할 수도 있습니다 setup 그리고 teardown 행동 양식.

마지막으로 테스트 프레임 워크의 방법이 테스트하는 것과 충돌하지 않을 것입니다. 테스트 프레임 워크가 방금 기능을 테스트에 버리고 setup 방법 ... 글쎄, 당신은 곤경에 처해 있습니다.

즉, 나는 당신의 고통을 듣습니다. 큰 테스트 프레임 워크는 성가시고 번거롭고 부서지기 쉬울 수 있습니다. Perl은 Xunit 스타일을 사용하지 않으며 짧은 테스트 기능 이름의 절차 스타일을 사용합니다. 보다 테스트 :: 더 예를 들어. 무대 뒤에서 당신이 제안한 것만으로도 모든 기능에서 사용하는 싱글 톤 테스트 인스턴스 객체가 있습니다. OO 테스트 메소드 모듈이있는 하이브리드 절차 어제 기능도 있습니다. 테스트 :: 클래스 두 세계를 모두 최대한 활용합니다.

PHP의 구문이 호출 방법에 너무 추악하다는 것을 고려

나는 당신이 마음에 들지 않는 것 같아요 ->. 나는 당신이 그것과 함께 사는 법을 배우는 것이 좋습니다. OO PHP는 대안보다 훨씬 좋습니다.

다른 팁

한 가지 좋은 이유는 그 이유입니다 assertXXX 메소드 이름으로서의 명명 충돌에 대한 위험이 높습니다.

또 하나는 그것이에서 파생된다는 것입니다 xunit 일반적으로 객체 지향 언어를 다루는 가족 - 처음에는 SmallTalk. 이를 통해 예를 들어 Java와 Ruby의 "형제 자매"와 쉽게 관련이 있습니다.

직접적인 답변은 아니지만 PHPUNIT 3.5 기준으로 글을 쓸 필요가 없습니다. $this-> 더 이상. PHPUNIT 3.5를 포함 해야하는 기능 라이브러리를 추가했습니다.

require_once 'PHPUnit/Framework/Assert/Functions.php';

그런 다음 할 수 있습니다

assertEquals('foo', $bar);

Sebastian Bergmann의 블로그 게시물을 참조하십시오

클래스 메서드에 테스트 케이스가 있으면 PHPUnit 작업이 절약됩니다.내장된 지능의 부족으로 인해 PHPUnit은 순수 테스트 기능을 찾거나 처리할 수 없습니다.간단한 부울 체인에서 ->assert*() 메시지를 인식하면 처리 논리가 다시 저장됩니다(테스트 사례 작성자가 아닌 PHPUnit의 경우).PHPUnit/SimpleTest 관점에서 오버헤드를 절약하는 것은 모두 구문론적 소금입니다.

오류/경고 메시지, 예외를 캡처하거나 PHP의 기본 Assert() 문을 인식하는 것은 기술적인 문제가 아닙니다.어려운 API가 더 기업적으로 보이기 때문에 완료되지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top