如何解决持久化新对象并生成其 id 的单元测试代码
我有一些代码将一个带有学说的对象持久化,然后使用其新生成的 id 将其链接到另一个对象。
class Foo extends DefaultDocument
{
/**
* @var int
* @MongoDB\Field(type="int")
* @MongoDB\Id(strategy="INCREMENT")
*/
protected $id
}
class Link
{
/**
* @var int
* @MongoDB\Field(type="int")
*/
private $fooId;
}
class Service
{
public function doesSomething()
{
$foo = new Foo();
$this->documentManager->persist($foo);
$link = new Link();
$link->setFooId($foo->getId());
}
}
class TestService
{
private function createService()
{
return new Service();
}
public function testDoesSomething()
{
$service = $this->createService();
$service->doesSomething();
}
}
启动测试时出现以下错误:
TypeError:传递给 ...\Link::setFooId() 的参数 1 必须属于 输入 int,给定 null
编辑:
终于为我的问题找到了正确的话题: Symfony2 : Doctrine : PHPUnit : Set entity Id during flushing with mocked entity manager in unit tests
解决方法
因为是单元测试,如果要获取id,需要flush entity,然后再填充id字段,但是会是功能测试,因为要使用数据库。
在单元测试中不能测试 ID 分配,只能在功能测试中进行
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。