Domanda

I'm working on a PHP project and use PHPUnit and Doctrine 2. I use the latest version at all. I wrote a lot of tests to test all the classes, functions and behavior. The tests are always running. Everything worked fine. Since I use Doctrine, I have applied the best-practice tips and initializes the ArrayCollection in the constructor.

public function __construct($username, $eMail, $password1, $password2) {
    $this->quiz = new ArrayCollection();
    $this->sessions = new ArrayCollection();
    $this->setUsername($username);
    $this->setEMail($eMail);
    $this->setPassword('', $password1, $password2);
}

The include of the ArrayCollection is:

use Doctrine\Common\Collections\ArrayCollection;

After this point, the PHPUnit tests are no longer running.

When I comment the line with the initialization all test run again. The members quiz and sessions are private. The application generally works.

I'm new with Doctrine 2 and PHPUnit. I've tried many things until now like different includes in the testcase etc. But nothing has helped. Maybe I forgot something in the testcase. Between the step initialization of the ArrayCollection and without initialization I have changed nothing in the testcase.

The testcase looks like this:

namespace Model;

require_once dirname(__FILE__) . '/../../Model/User.php';

/**
 * Test class for User.
 * Generated by PHPUnit on 2012-04-03 at 14:48:39.
 */
class UserTest extends \PHPUnit_Framework_TestCase {

    /**
     * @var User
     */
    protected $user;

    // constructor of the test suite
    function UserTest($name) {
        $this->PHPUnit_TestCase($name);
    }

    /**
     * Sets up the fixture, for example, opens a network connection.
     * This method is called before a test is executed.
     */
    protected function setUp() {
        $username = 'musteruser';
        $eMail = 'must@muster.ch';
        $pw = 'muster.muster';
        $this->user = new User($username, $eMail, $pw, $pw);
    }

    /**
     * Tears down the fixture, for example, closes a network connection.
     * This method is called after a test is executed.
     */
    protected function tearDown() {
        unset($this->user);
    }

Right now I really have no idea what could be the problem. Maybe someone has already experienced the same thing or has any idea what could be the problem.

Thanks for any help.

È stato utile?

Soluzione 2

I have found a solution for the problem. I created a file with the name bootstrap.php with the following content:

// Import the ClassLoader
use Doctrine\Common\ClassLoader;

// Autoloader for Doctrine
require '/../../php/PEAR/Doctrine/Common/ClassLoader.php';

// Autoloading for Doctrine
$doctrineClassLoader = new ClassLoader('Doctrine', realpath(__DIR__ . '/../../php/PEAR'));
$doctrineClassLoader->register();

The file is placed in the home directory of Test Files, the part for Unit Testing in a NetBeans project. The important thing is, that is nothing to edit in the testcases.

Altri suggerimenti

You may need to ensure that the Doctrine\Common folder is on the include path for your test cases when you call PHPUnit.

Are you customizing any class loaders for your application, since you need to do the same for your tests.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top