如何对 Vapor DB 对象进行单元测试

Posted

技术标签:

【中文标题】如何对 Vapor DB 对象进行单元测试【英文标题】:How to unit test Vapor DB Objects 【发布时间】:2021-12-22 03:23:02 【问题描述】:

我有以下简单的对象关系:

public final class Planet: Model 
    
    @ID(key: .id)
    public var id: UUID?
    
    @Parent(key: .starId)
    public var star: Star

当应用程序使用真正的数据库运行时,一切正常,在分配给子代之前从数据库中查询父代。 我在逻辑级别有许多单元测试,我需要一个对象来测试某些条件并且没有数据库,即我天真地这样做了

let star = Star()
var planet = Planet()
planet.star = star

这在最后一行失败,例外是“使用 $ 前缀访问”。该错误是虚假的,真正的原因是 Vapor/Fluent 对象与数据库相关联。 有没有一种简单的方法可以在不实例化数据库的情况下完成这项工作?

【问题讨论】:

【参考方案1】:

错误不是假的,错误是正确的。这与属性包装器的工作方式有关,并且 Fluent 需要保护对关系的访问,以防它们没有被预先加载。

如果你想手动设置关系,你可以这样做

planet.$star.value = star

您可以找到更多信息(和上面的代码示例)in the docs

【讨论】:

以上是关于如何对 Vapor DB 对象进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

如何对继承对象进行单元测试?

如何在 ios XCTestCase 中对两个对象不相等进行单元测试

如何对依赖于 ActivatedRoute 参数的组件进行单元测试?

如何对具有对象 RequestParam 的 Controller 方法进行单元测试?

如何对 ASP.NET Core 控制器或模型对象进行单元测试?

如何对 Symfony2 控制器进行单元测试?