gpt4 book ai didi

testing - 单元测试 Doctrine ODM

转载 作者:行者123 更新时间:2023-11-28 19:43:46 27 4
gpt4 key购买 nike

我开始编写 Doctrine 2 Mongo ODM 单元测试,但意识到我的代码中没有好的策略来执行此操作。我想运行测试并实际保留对象,但我希望允许在拆解中轻松删除我的测试数据。集合和数据库名称必须根据我在注释中看到的内容指定,并且不能被覆盖,所以我不能只创建一个测试数据库并稍后将其删除。

有没有人有他们认为最好的测试方法的最佳实践或示例?

最佳答案

您不必持久化您的对象。好的方法是使用模拟来检查您的对象是否已持久化。我给你举个例子。假设你有一个类:

class SomeSerivce
{
private $dm;

public function __construct(DocumentManager $dm)
{
$this->dm = $dm;
}

public function doSomeMagic($someDocument, $someValue)
{
$someDocument->setSomeValue($someValue);
$this->dm->persist($someDocument);
$this->dm->flush();
}
}

现在,您不会检查文档是否真的持久化了,因为这是在某处 id Doctrine 代码中测试的。您可以假设 persistflush 方法工作正常。您要检查的是您的代码是否正确调用了这些方法。

因此,您的测试可能如下所示:

 (...)
public function testDoSomeMagic()
{
$documment = new Document();

// preapre expected object
$expectedValue = 123;
$expectedDocument = new Document();
$expectedDocument->setValue($expectedValue);

// prepare mock
$dmMock = $this->getMockBuilder('DocumentManager')
->setMethods(array('persist', 'flush'))
->disableOriginalConstructor()
->getMock();
$dmMock->expects($this->once())
->method('persist');
->with($this->equalTo($expectedDocument));
$dmMock->expects($this->once())
->method('flush');

// new we start testing with the mock
$someService = new SomeService($dmMock);
$someService->doSomeMagic($document, $expectedValue);
}

关于testing - 单元测试 Doctrine ODM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9733332/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com