Netbeans тесты не выполняются

У меня есть проект php с включенными модульными тестами. Я использую Netbeans для разработки и хотел бы интегрировать phpunit в свою IDE. Если я запускаю phpunit из командной строки, он работает. Если я нажимаю Alt+F6 для запуска тестов в Netbeans, тесты не выполняются, я получаю сообщение:

Тесты не выполнены (Возможно, произошла ошибка, проверьте в окне вывода.)

Структура (это модуль Zend Framework 2):

Foo/
  src/
    Foo/
      Bar.php
      Baz.php
  tests/
    Foo/
      BarTest.php
    bootstrap.php
    phpunit.xml
  Module.php
  autoload_register.php

Содержимое BarTest.php

namespace Foo;

use PHPUnit_Framework_TestCase as TestCase;

class BarTest extends TestCase
{
    public function testIsWorking ()
    {
        $this->assertTrue(true);
    }
}

Мой phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="bootstrap.php">
    <testsuite name="Foo">
        <directory>./</directory>
    </testsuite>
</phpunit>

Мой bootstrap.php:

// Set error reporting pretty high
error_reporting(E_ALL | E_STRICT);

// Get base, application and tests path
define('BASE_PATH',  dirname(__DIR__));

// Load autoloader
require_once BASE_PATH . '/autoload_register.php';

В свойствах проекта Netbeans я пробовал:

  1. Чтобы установить каталог тестов в Foo/tests (это необходимо, я думаю)
  2. Чтобы установить файл начальной загрузки (я думаю, это не обязательно)
  3. Чтобы установить конкретно файл конфигурации XML (я думаю, не требуется)
  4. Чтобы настроить запуск всех * тестовых файлов (я думаю, это не обязательно)

Как я могу убедиться, что Netbeans может выполнять мои тесты phpunit?


person Jurian Sluiman    schedule 12.04.2012    source источник
comment
Вы пытались запустить phpunit --bootstrap bootstrap.php Foo/tests ? Потому что это то, что в конечном итоге делает IDE.   -  person Artjom Kurapov    schedule 12.04.2012


Ответы (4)


Вы можете просто поместить все это в ваш PHPUnit bootstrap.php:

<?php

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
person derFunk    schedule 10.04.2013

Проблема в том, что Netbeans ожидает, что все тесты будут находиться в одной корневой папке проекта. Если этого не сделать, то покрытие кода и другие функции будут работать некорректно. Дополнительные сведения см. в разделе улучшения.

Эту проблему можно решить, создав собственный testSuite:

  • Создайте каталог «test» или «tests» в корневой папке проекта, если он еще не создан.
  • Создайте файл TestSuite.php в этой «тестовой» папке.
  • Добавьте этот TestSuite.php в настройки вашего проекта Netbeans.
<?php

class TestSuite extends PHPUnit_Framework_TestSuite
{
    public static function suite()
    {
        $suite = new TestSuite();

        $file = '/Foo/tests/Foo/BarTest.php';

        echo 'Adding test: ' . $file . "\n";
        $suite->addTestFile($file);

        //add here algorithm that will search and add all test files from your /tests directory

    return $suite;

}

Netbeans 7.2 будет иметь удобную функцию запускать все тесты в отдельном каталоге.

person pulzarraider    schedule 15.04.2012

Хотя я установил error_reporting на высокий уровень, в PHP CLI не было включено display_errors. Вот и все, теперь я получил отчет обратно...

person Jurian Sluiman    schedule 17.05.2012
comment
Можете ли вы объяснить, что это значит и как я могу это сделать? Я также получаю ошибку Perhaps an error occurred, verify in Output window.. Я совершенно новичок в PHPUnitTest. - person Geek; 17.07.2013
comment
Файл bootstrap.php включал error_reporting(E_ALL | E_STRICT);, но не ini_set('display_errors', '1');. Таким образом, хотя об ошибках сообщалось, они не отображались. Установка этого тоже показала мне ошибки. - person Jurian Sluiman; 17.07.2013
comment
Благодарю за ваш ответ. Можете ли вы сказать мне, где я могу найти этот файл bootstrap.php? Я получаю так много файлов bootstrap.php в результатах поиска и не знаю, в какой из них мне следует внести изменения. - person Geek; 17.07.2013

NetBeans не находит классы автозагрузчика. Потом в настройках проекта надо сказать какой класс автозагрузчик, бутстрап и т.д.

В моем случае просто вошли: Свойства проекта -> Тестирование -> PHPUnit. Я установил параметр «Использовать Bootstrap» и указал путь к загрузчику.

В моем загрузочном файле есть автозагрузчик, поэтому все мои тестовые классы выполнялись без ошибок.

person Thiago Valentim    schedule 19.01.2014