Composer 및 autoload.php를 사용하여 PHPUnit에서 수업 자동 로딩
제가 방금 Composer를 통해 Sebastian Bergmann의 PHP Unit version 3.7.19를 설치하고 유닛 테스트를 하고자 하는 수업을 작성하였습니다.
저는 모든 수업을 사용하지 않고 각 단원 시험에 자동으로 로딩하고 싶습니다.include
아니면require
내 시험에서 가장 높은 점수를 받았지만 이것은 어렵다는 것을 증명하고 있습니다!
내 디렉토리 구조는 다음과 같습니다(후행/슬래시는 파일이 아닌 디렉토리를 나타냅니다).
* composer.json
* composer.lock
* composer.phar
* lib/
* returning.php
* tests/
* returningTest.php
* vendor/
* bin/
* phpunit
* composer/
* phpunit/
* symfony/
* autoload.php
나의 composer.json 파일은 다음과 같습니다.
"require": {
"phpunit/phpunit": "3.7.*",
"phpunit/phpunit-selenium": ">=1.2"
}
돌아오는 길.php 클래스 파일은 다음을 포함합니다.
<?php
class Returning {
public $var;
function __construct(){
$this->var = 1;
}
}
?>
반환되는 Test.php 테스트 파일에는 다음 내용이 포함되어 있습니다.
<?php
class ReturningTest extends PHPUnit_Framework_TestCase
{
protected $obj = null;
protected function setUp()
{
$this->obj = new Returning;
}
public function testExample()
{
$this->assertEquals(1, $this->obj->var);
}
protected function tearDown()
{
}
}
?>
가 실행할 ./vendor/bin/phpunit tests
명령줄에서 다음 오류가 발생합니다.
PHP 치명적 오류: 8번 라인의 /files/code/php/db/tests/returningTest.php에서 클래스 'Returning'을 찾을 수 없습니다.
나는 그것을 알아챘다.composer
된을 autoload.php
줄을 지어 들어오다vendor/autoload.php
이게 내 문제와 관련이 있는지는 잘 모르겠어요
또한 Stack Overflow에 대한 다른 답변에서 사람들은 PSR-0을 작곡가에서 사용하는 것에 대해 언급했습니다.namespace
명령어는 PHP로 되어 있지만 둘 다 성공적으로 사용하지 못했습니다.
◦! 걱정 없이 그냥 객체를 데할 수 .include
아니면require
.
업데이트: 2013년 8월 14일
저는 이제 프로젝트를 위해 PHPUnit 테스트를 쉽게 시작하고 실행할 수 있도록 PHPnit 스켈레톤이라는 오픈 소스 프로젝트를 만들었습니다.
처음에는.당신은 오토로더에게 클래스의 php 파일을 어디서 찾을 수 있는지 알려줘야 합니다.이는 PSR-0 표준을 따르는 것으로 이루어집니다.
가장 좋은 방법은 네임스페이스를 사용하는 것입니다.합니다를 합니다.Acme/Tests/ReturningTest.php
이 a했을 a때일를a일때une을d이a를Acme\Tests\ReturningTest
클래스. 훌륭한 네임스페이스 튜토리얼이 있습니다. 검색하고 읽어보세요.네임스페이스는 오토로딩을 위해 PHP에 들어온 것이 아니라 오토로딩에 사용할 수 있는 것임을 유의하시기 바랍니다.
PSR-0 와 됩니다 는 됩니다 )와 함께 됩니다.vendor/autoload.php
자동 로더에 파일을 검색하도록 지시하는 경우lib
디렉토리 입니다.그러면 사용할 때.ReturningTest
그것은 찾을 것입니다/lib/ReturningTest.php
.
이것을 당신의 것에 추가합니다.composer.json
:
{
...
"autoload": {
"psr-0": { "": "lib/" }
}
}
이제 오토로더는 테스트를 실행하기 전에 실행할 파일인 부트스트랩 파일이 있다는 것을 PHP 유닛에 알려주어야 하는 클래스를 찾을 수 있습니다.사용할 수 있습니다.--bootstrap
부트스트랩 파일의 위치를 지정하는 옵션:
$ ./vendor/bin/phpunit tests --bootstrap vendor/autoload.php
그러나 PHP 장치 구성 파일을 사용하는 것이 좋습니다.
<!-- /phpunit.xml.dist -->
<?xml version="1.0" encoding="utf-8" ?>
<phpunit bootstrap="./vendor/autoload.php">
<testsuites>
<testsuite name="The project's test suite">
<directory>./tests</directory>
</testsuite>
</testsuites>
</phpunit>
이제 명령을 실행하면 구성 파일이 자동으로 탐지됩니다.
$ ./vendor/bin/phpunit
디렉터리에 를 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "-c
선택.
[업데이트2] 또 다른 간단한 대안 접근법은autoload-dev
의 지시composer.json
(참조).다른 클래스를 자동으로 로드하기 위해 bootstrap.php 2개(prod용, dev용)를 유지할 필요가 없다는 장점이 있습니다.
{
"autoload": {
"psr-4": { "MyLibrary\\": "src/" }
},
"autoload-dev": {
"psr-4": { "MyLibrary\\Tests\\": "tests/" }
}
}
[업데이트] Water J의 답변이 더 완성되었습니다.하지만 제 것은 PSR-0 오토로딩을 설치하려는 사람들을 도울 수 있습니다.tests/
폴더.
은 Pphunit이을진든다을sp 패턴으로 .*Test.php
으로 로드할. 그래서 우리는 그것들을 우리 스스로 자동으로 로드할 필요가 없습니다.하지만 우리는 여전히 아래에 있는 다른 지원 수업들을 자동으로 로드하기를 원합니다.tests/
고정 장치/클래식 또는 일부 부모 클래스와 같은.
Composer 프로젝트 자체가 어떻게 phpunit 테스트를 설정하고 있는지 살펴보는 것이 쉬운 방법입니다.사실 아주 간단합니다."bootstrap"(부트스트랩)으로 된 행을 메모합니다.
참조 : https://github.com/composer/composer/blob/master/phpunit.xml.dist
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
bootstrap="tests/bootstrap.php"
>
<testsuites>
<testsuite name="Composer Test Suite">
<directory>./tests/Composer/</directory>
</testsuite>
</testsuites>
<groups>
<exclude>
<group>slow</group>
</exclude>
</groups>
<filter>
<whitelist>
<directory>./src/Composer/</directory>
<exclude>
<file>./src/Composer/Autoload/ClassLoader.php</file>
</exclude>
</whitelist>
</filter>
</phpunit>
참조 : https://github.com/composer/composer/blob/master/tests/bootstrap.php
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
error_reporting(E_ALL);
$loader = require __DIR__.'/../src/bootstrap.php';
$loader->add('Composer\Test', __DIR__);
위의 마지막 줄은 namespace Composer 아래에 있는 phpunit 테스트 클래스를 자동으로 로드하는 것입니다.\테스트.
그 어떤 대답도 제가 찾던 것이 아니었습니다.예, PHP는 테스트 파일을 로드하지만 스터브/고정 장치는 로드하지 않습니다.Ma의 은 Chaun Ma를 운영하고 있기 않습니다.vendor/bin/phpunit
이미 자동 로드가 포함되어 있기 때문에 해당 시점에서 자동 로드의 인스턴스가 스택으로 더 많은 경로를 푸시할 수 있는 방법은 없습니다.
저는 결국 문서에서 이 내용을 발견했습니다.
여러 디렉토리에서 동일한 접두사를 검색해야 할 경우 다음과 같이 배열로 지정할 수 있습니다.
{ "autoload": { "psr-0": { "Monolog\\": ["src/", "lib/"] } } }
자동 로딩 및 부트스탭으로 php유닛을 설정하는 정말 간단한 방법이 있습니다.phpunit's 사용--generate-configuration
당신의 를 만들기 위한 옵션phpunit.xml
몇 초 안에 구성할 수 있습니다.
vendor/bin/phpunit --generate-configuration
(아니면 그냥)phpunit --generate-configuration
PATH)에 pphunit이 설정되어 있는 경우.이 옵션은 버전 phpunit5 이상부터 사용할 수 있습니다.
이 옵션을 선택하면 부트스트랩 파일(vendor/autoad.php), 테스트 및 소스 디렉토리를 입력하라는 메시지가 표시됩니다.프로젝트가 Composer 기본값(디렉토리 구조 아래 참조)으로 설정되어 있으면 기본 옵션만 있으면 됩니다.RETURN을 3번만 누르면 됩니다.
project-dir
-- src
-- tests
-- vendor
기본 phpunit.xml이 제공되는데, 이는 사용하기 좋습니다.기능을 할 수 든수을다수할예론을해(다예수u:할e론yol을tf을esecolors="true"
이 필요합니다 -: :
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/8.1/phpunit.xsd"
bootstrap="vendor/autoload.php"
executionOrder="depends,defects"
forceCoversAnnotation="true"
beStrictAboutCoversAnnotation="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutTodoAnnotatedTests="true"
verbose="true">
<testsuites>
<testsuite name="default">
<directory suffix="Test.php">tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src</directory>
</whitelist>
</filter>
</phpunit>
PHP Nit 7을 사용하고 있다면 수업을 할 수 있습니다.src/
다음과 같은 테스트에서 자동 로드할 폴더:
를 합니다.
composer.json
파일은 다음과 유사합니다.{ "autoload": { "classmap": [ "src/" ] }, "require-dev": { "phpunit/phpunit": "^7" } }
변경사항을 적용하려면
composer.json
명령run령:composer install
마지막으로 테스트를 실행할 수 있습니다.
tests/
폴더:./vendor/bin/phpunit tests/
언급URL : https://stackoverflow.com/questions/15710410/autoloading-classes-in-phpunit-using-composer-and-autoload-php
'itsource' 카테고리의 다른 글
WooCommerce 체크아웃 레이아웃 (0) | 2023.09.14 |
---|---|
Gutenberg 코드 블록에 탭 문자 입력 (0) | 2023.09.14 |
Rails 3은 연결 카운트 조건에 따라 쿼리 (0) | 2023.09.14 |
C에서 포인터를 변경하는 것은 원자 작용으로 간주됩니까? (0) | 2023.09.14 |
jQuery : blur() 이벤트 전 fire click() 이벤트 (0) | 2023.09.14 |