我想问你关于编写单元测试的练习,如何模拟对象以及不重复代码?
我正在使用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
}
}
当然这只是我想象的伪代码,我的第一个想法。你有什么想法?
基本上我问的是如何更快地编写单元测试并且不重复代码?