ZendFramework 2 - PHPUnit - командная строка работает, NetBeans заявляет: "Тесты не выполнены"
Кажется, у меня небольшая проблема с выполнением тестов PHPUnit для собственных модулей в Zend Framework 2.
ОС: Mac OS 10.8.3
Zend Framework 2.1.4
PHPUnit версии 3.7.19 (устанавливается через грушу)
Версия PHP 5.3.15 (включен xdebug, версия 2.1.3)
Я следовал инструкциям руководства Zend, чтобы создать модуль "Альбом" ( http://framework.zend.com/manual/2.1/en/user-guide/modules.html).
Вместо того, чтобы помещать модульные тесты в папки модулей, я хочу, чтобы они были все в одной централизованной папке. Это базовая структура моего приложения:
-config
-данные
-модуль
-публичный
-тесты
--Modules
---Альбом
---- AlbumTest.php
--Bootstrap.php
--phpunit.xml
-vendor
... (license, readme, composers и init_autoloader.php)
-> Тест для Альбома модулей находится в папке "Модули / Альбом" в "тестах". Папка "tests" содержит также Bootstrap.php и phpunit.xml.
Вот содержимое файлов:
Bootstrap.php
<?php
/*
* Set error reporting to the level to which Zend Framework code must comply.
*/
error_reporting( E_ALL | E_STRICT );
/*
* The first run required me to fix some constants
*/
defined('TESTS_ZEND_FORM_RECAPTCHA_PUBLIC_KEY') || define('TESTS_ZEND_FORM_RECAPTCHA_PUBLIC_KEY', 'public key');
defined('TESTS_ZEND_FORM_RECAPTCHA_PRIVATE_KEY') || define('TESTS_ZEND_FORM_RECAPTCHA_PRIVATE_KEY', 'private key');
defined('TESTS_ZEND_LDAP_PRINCIPAL_NAME') || define('TESTS_ZEND_LDAP_PRINCIPAL_NAME', 'someUser@example.com');
defined('TESTS_ZEND_LDAP_ALT_USERNAME') || define('TESTS_ZEND_LDAP_ALT_USERNAME', 'anotherUser');
chdir(dirname(__DIR__));
/*
* autoload the application
*/
include __DIR__ . '/../init_autoloader.php';
Zend\Mvc\Application::init(include 'config/test.config.php');
phpunit.xml
<phpunit bootstrap="./Bootstrap.php" colors="true">
<testsuites>
<testsuite name="Zend Module Tests">
<directory>./Modules</directory>
</testsuite>
</testsuites>
</phpunit>
AlbumTest.php
<?php
namespace AlbumTest\Model;
use Album\Model\Album;
use PHPUnit_Framework_TestCase;
/**
* @category Module
* @package Album
* @subpackage UnitTests
* @group Module_Album
*/
class AlbumTest extends PHPUnit_Framework_TestCase {
public function testAlbumInitialState() {
$album = new Album();
$this->assertNull($album->artist, '"artist" should initially be null');
$this->assertNull($album->id, '"id" should initially be null');
$this->assertNull($album->title, '"title" should initially be null');
}
public function testExchangeArraySetsPropertiesCorrectly() {
$album = new Album();
$data = array('artist' => 'some artist',
'id' => 123,
'title' => 'some title');
$album->exchangeArray($data);
$this->assertSame($data['artist'], $album->artist, '"artist" was not set correctly');
$this->assertSame($data['id'], $album->id, '"id" was not set correctly');
$this->assertSame($data['title'], $album->title, '"title" was not set correctly');
}
public function testExchangeArraySetsPropertiesToNullIfKeysAreNotPresent() {
$album = new Album();
$album->exchangeArray(array('artist' => 'some artist',
'id' => 123,
'title' => 'some title'));
$album->exchangeArray(array());
$this->assertNull($album->artist, '"artist" should have defaulted to null');
$this->assertNull($album->id, '"id" should have defaulted to null');
$this->assertNull($album->title, '"title" should have defaulted to null');
}
public function testGetArrayCopyReturnsAnArrayWithPropertyValues() {
$album = new Album();
$data = array('artist' => 'some artist',
'id' => 123,
'title' => 'some title');
$album->exchangeArray($data);
$copyArray = $album->getArrayCopy();
$this->assertSame($data['artist'], $copyArray['artist'], '"artist" was not set correctly');
$this->assertSame($data['id'], $copyArray['id'], '"id" was not set correctly');
$this->assertSame($data['title'], $copyArray['title'], '"title" was not set correctly');
}
public function testInputFiltersAreSetCorrectly() {
$album = new Album();
$inputFilter = $album->getInputFilter();
$this->assertSame(3, $inputFilter->count());
$this->assertTrue($inputFilter->has('artist'));
$this->assertTrue($inputFilter->has('id'));
$this->assertTrue($inputFilter->has('title'));
}
}
NetBeans знает, где найти бинарные файлы phpunit:
(я хотел разместить здесь изображения, но у меня нет репутации:), я постараюсь объяснить это) Пути к ним настраиваются в опциях - php - unit testing
/ USR / местные / груша / бен / PHPUnit
и / usr / local / pear / bin / phpunit-skelgen
В свойствах проекта я установил "Использовать конфигурацию XML" и вставил путь к phpunit.xml. Я также проверил "Запросить группы тестов перед запуском тестов" - я дал тест над группой "Module_Album" - таким образом я проверяю, что PHPUnit находит правильный тест.
Я щелкаю правой кнопкой мыши на Project и выбираю "Test", он показывает мне группу "Module_Album", я проверяю ее и нажимаю "Ok". Он запускает что-то, говорит мне, что он находится в phpunit.xml ("Конфигурация прочитана из FULL_PATH/tests/phpunit.xml"). После запуска он говорит мне, что не выполнил никаких тестов.
Это полный вывод в NetBeans:
PHPUnit 3.7.19 by Sebastian Bergmann.
Configuration read from FULL_PATH/tests/phpunit.xml
Time: 9 seconds, Memory: 348.25Mb
[2KNo tests executed!
[2K
Generating code coverage report in Clover XML format ... done
Во всяком случае, я могу сделать то же самое успешно через оболочку (терминал). Не имеет значения, если я напрямую подключаю каталог tests и запускаю phpunit, использую полный путь к бинарному файлу phpunit (чтобы убедиться, что я не использую другую версию), указав полный путь к phpunit.xml, и так далее. Вот несколько примеров:
phpunit
phpunit -c FULL_PATH/tests/phpunit.xml
/usr/local/pear/bin/phpunit -c FULL_PATH/tests/phpunit.xml
Все эти команды дают мне то, что я ожидаю:
PHPUnit 3.7.19 by Sebastian Bergmann.
Configuration read from FULL_PATH/tests/phpunit.xml
.....
Time: 0 seconds, Memory: 12.75Mb
OK (5 tests, 16 assertions)
- Я не понимаю, почему это работает в оболочке, но не через NetBeans
- NetBeans использует 350 МБ, а в оболочке - только 12,75 МБ.
- В случае, если я уберу опцию "Запросить группы тестов перед запуском тестов", похоже, что я попробую запустить все ZendTests. Не знаю, как это возможно, из phpunit.xml он не должен их найти.
Любая помощь приветствуется, спасибо!
1 ответ
Я наконец выяснил, что происходит. Ранее я запускал ZendTests с phpunit.xml, который находится внутри vendor/zendframework/zendframework/tests
По какой-то причине NetBeans сохраняет каталог testfile, который он находит при первом запуске теста, и не освобождает их, если выбран другой файл phpunit.xml. Мне пришлось изменить путь моего "нового" каталога тестов с помощью "Правой кнопки мыши на проекте" - "Свойства" - "Источники" - "Папка тестов".
Теперь NetBeans запускает тест и выдает точно такой же вывод, как CLI.