Jak tworzyć testy w jednostkach Doctrine bez ich utrzymywania (jak ustawić id)

Pracuję nad testami dla projektu Symfony2, a teraz szukam sposobu na tworzenie testów obejmujących obiekty encji bez utrzymywania ich. Problemem jest:ID jest polem prywatnym i nie ma do tego celu. Mogę utworzyć nowy obiekt i ustawić niektóre właściwości, ale nie mogę przetestować niczego, co by go dotyczygetId () połączenia.

$entity = new TheEntity();
// Can't set ID!
$entity->setProperty('propertyValue');

$name = $entity->getProperty(); // OK
$id = $entity->getId(); // not OK - null

Postanowienia, o których wiem:

Inicjowanie całego jądra (Symfony'sWebTestCase :: createKernel ()) i utrzymywanie podmiotówTworzenie makiety obiektu dla każdej jednostki, która zwróci prawidłowy identyfikatorHacki jak metoda statyczna wJednostka klasa zwracająca zainicjowany obiekt lub dodająca setter dlaID pole

Jaki jest zalecany sposób radzenia sobie z tym, jak uzyskać podmiot do testowania w czysty i szybki sposób, z ustawionym identyfikatorem?

Edytować

Okazało się, że mogę to rozwiązać z drwiną ... przepraszam, wciąż się uczę. Szukałem czystego, standardowego, a zarazem szybkiego sposobu na załatwianie spraw. Jednak zapomniałem o drugim parametrzegetMock() - to jestNie muszę drwić z każdej metody istoty, której zamierzam użyć. Chciałem uniknąć wielu->expects()->method()->will() itd. A to osiąga się przez dodanie:array('getId'). Ta metoda pomocnicza rozwiązuje problem:

protected function getEntityMock($entityClass, $id)
{
    $entityMock = $this->getMock($entityClass, array('getId'));
    $entityMock
            ->expects($this->any())
            ->method('getId')
            ->will($this->returnValue($id));

    return $entityMock;
}

Podczas tworzenia wielu elementów tej samej klasy, rzeczy można oczywiście uprościć bardziej metodami pomocniczymi, takimi jak ta:

protected function getTheEntityMock($id)
{
    return $this->getEntityMock('\The\NameSpace\TheEntity', $id);
}

Jedynyograniczenie jest tak, że sama jednostka nie może z niej korzystaćid tylko własnośćgetId() rębacz.

Wszelkie cenne dane są nadal mile widziane, ale wierzę w PHPUnitgetMock() rozwiązałem to dobrze.

questionAnswers(3)

yourAnswerToTheQuestion