8000 GitHub - rengaw83/test-entity: A helper class for testing, especially for unit tests to easily test properties of entities or data transfer objects.
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

A helper class for testing, especially for unit tests to easily test properties of entities or data transfer objects.

License

Notifications You must be signed in to change notification settings

rengaw83/test-entity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Testing Entities Trait

A helper class for testing, especially for unit tests to easily test properties of entities or data transfer objects.

Installation

Install via composer:

dcrr composer req --dev r83dev/test-entity

Usage

Use the EntityPropertiesTrait in your test and create getEntityClass and getEntityProperties methods:

Example entity MyEntity
class MyEntity
{
    private int $id;

    private string $name = '';

    private ?Collection $categories;

    private bool $active = false;

    public function __construct(
        private readonly string $key
    ) {
        $this->categories = new ArrayCollection();
    }

    public function getId(): int
    {
        if (!isset($this->id)) {
            throw new \LogicException('Entity not yet initialized or made persistent.');
        }

        return $this->id;
    }

    public function getKey(): string
    {
        return $this->key;
    }

    public function getName(): string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

    public function getCategories(): Collection
    {
        return $this->categories;
    }

    public function setCategories(Collection $categories): self
    {
        $this->categories = $categories;

        return $this;
    }

    public function isActive(): bool
    {
        return $this->active;
    }

    public function setActive(bool $active): self
    {
        $this->active = $active;

        return $this;
    }
}
/**
 * @extends R83Dev\TestEntity\EntityPropertiesTrait<MyEntity>
 */
class MyEntityTest {
    use R83Dev\TestEntity\EntityPropertiesTrait;
    
    /**
     * The entities fully qualified class name.
     */
    protected static function getEntityClass(): string
    {
        return MyEntity::class;
    }

    /**
     * Constructor arguments required to create the entity instance.
     * Required for entities with mandatory constructor arguments only
     */
    protected static function getEntityConstructorArguments(): array
    {
        return ['key'];
    }

    /**
     * All properties of the entity.
     * Properties can be private, protected, public, readonly, ...
     */
    protected static function getEntityProperties(): array
    {
        return [
            'id' => 5,
            'name' => 'My Entity',
            'categories' => new ArrayCollection(['category1']),
            'active' => true,
        ];
    }

    /**
     * Add your own custom tests to check special logic.
     */
    #[\PHPUnit\Framework\Attributes\Test]
    public function getIdThrowsException(): void
    {
        $this->expectException(\LogicException::class);
        $this->expectExceptionMessage('Entity not yet initialized or made persistent.');
        $this->getEntity()->getId();
    }

}

The Trait will now test the getters, setters and issers of the properties

About

A helper class for testing, especially for unit tests to easily test properties of entities or data transfer objects.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

0