0

我想问你写单元测试的实践,如何模拟对象而不重复代码?

我正在使用 Symfony2 框架,例如我有许多带有自定义验证器的捆绑包。当我和我的团队的其他成员编写单元测试时,我们重复模拟 Constraint、ExecutionContext、ConstraintViolationBuilderInterface 的代码。我知道我们可以创建特征或抽象类或其他东西,我们可以在其中存储负责模拟的代码,但在我开始这样做之前,我想了解您的最佳实践。

我的第一个想法是创建一个类/特征,它将存储例如所有存储库的模拟。例子:

class MockRepositoryHelper extends \PHPUnit_Framework_TestCase
{
    public function getUserRepositoryMock()
    {
        return $this->prophesize(UserRepository::class);
    }

    // next repositories getters
}

然后在实际测试用例中使用此代码:

class EmailValidator extends \PHPUnit_Framework_TestCase
{
    private $mockRepositoryHelper;

    public function setUp()
    {
        parent::setUp();
        $this->mockRepositoryHelper = new MockRepositoryHelper();
    }

    /**
     * @test
     */
    public function it_should_find_user()
    {
        $userRepository = $this->mockRepositoryHelper->getUserReposioryMock();
        $userRepository->findUser(Argument::type('string'))->willReturn(null);

        // rest of the test
    }
}

当然这只是我想象的伪代码,我的第一个想法。你有什么想法?

基本上我在问如何更快地编写单元测试并且不重复代码?

4

0 回答 0