모듈을 작성할 때 응용 프로그램의 가장 중요한 부분에 대한 단위 테스트를 제공하려고합니다. 그러나 현재 단위 테스트를 작성하는 방법에는 몇 가지 방법이 있습니다 (Magento 2.1.3).
다른 테스트 방법
bin/magento dev:tests:run unit
Magento와 함께 번들로 제공되는 기본 phpunit 설정과 통합하여 실행하십시오.- 별도로 작성하고
vendor/bin/phpunit app/code/Vendor/Module/Test/Unit
Magento 인 모든 것을 사용 하여 조롱하십시오. - 별도로 작성하고 모든 것을 조롱하고 시스템 전역 버전의 PHPUnit을 사용하십시오.
- 별도로 작성하고로 실행
vendor/bin/phpunit
하지만 여전히 사용하십시오\Magento\Framework\TestFramework\Unit\Helper\ObjectManager
.
마 젠토 2와 PHPUnit
게다가 Magento 2는 PHP7과 호환되지 않는 PHPUnit 4.1.0과 함께 제공됩니다. 타입 힌트 네이티브 ( string
in 및`int)와 서명에 리턴 타입을 선언하면 에러가 발생합니다. 예를 들어, 다음과 같은 메소드 서명이있는 인터페이스 / 클래스 :
public function foo(string $bar) : bool;
... PHPUnit 4.1.0에서는 조롱 할 수 없습니다. :-(
내 현재 상황
이 때문에 필자는 현재 시스템 전역 PHPUnit 버전을 호출하여 세 번째 방식으로 단위 테스트를 작성하고 있습니다.
내 설정에서 PHPUnit 5.6을 전역에 설치 했으므로 올바른 PHP7 코드 작성을 해결할 수 있지만 약간의 조정이 필요합니다. 예를 들면 다음과 같습니다.
phpunit.xml
composer autoloader를 사용할 수 있도록 다음과 같이 보여야합니다.
<?xml version="1.0"?>
<phpunit bootstrap="../../../../../../vendor/autoload.php"
colors="true">
<testsuites>
<testsuite name="Testsuite">
<directory>.</directory>
</testsuite>
</testsuites>
</phpunit>
... 내 모든 방법 setUp()
에서 다음 검사를 수행하여 순방향 호환성으로 테스트를 작성할 수 있습니다.
// Only allow PHPUnit 5.x:
if (version_compare(\PHPUnit_Runner_Version::id(), '5', '<')) {
$this->markTestSkipped();
}
이렇게하면 Magentos의 내장 PHPUnit에서 테스트를 실행할 때 오류가 발생하지 않습니다.
내 질문
여기 내 질문이 있습니다 : 이것이 단위 테스트를 작성하는 '건강한'방법입니까? Magento에는 테스트를 돕기 위해 많은 도구가 번들로 포함되어 있으며 PHP7을 사용하고 있기 때문에 사용할 수 없습니다. GitHub에는이 문제를 해결하는 티켓이 있지만 커뮤니티에서 현재 테스트를 작성하는 방법이 궁금합니다.
Magento 2에서 단위 테스트를 작성하는 방법이 있습니까? 그래서 코드를 '다운 그레이드'할 필요는 없지만 객체 관리자가 만지는 모든 것을 조롱하는 데 여전히 Magentos의 내장 도우미를 사용할 수 있습니까? 아니면 단위 테스트에서도 객체 관리자를 사용하는 것이 나쁜 습관입니까?
나만의 커스텀 모듈을 유닛 테스트하는 방법에 대한 많은 지침 / 예제가 빠져 있습니다.