结构 属性 初始化测试

Struct property initialization testing

XCTest 代码覆盖表明我应该对 HealthStat's id 属性 初始化进行测试。最好的测试方法是什么?

struct HealthStat: Identifiable {
    let id = UUID()
    let stat: HKQuantity?
    let date: Date
}

您要测试的是什么?在当前的实现中,很难对它进行任何测试,因为您无法控制 UUID 的值。为了提高可测试性,您必须注入 UUID(或 UUID 本身)的创建。

例如,您可以将代码更新为...

struct HealthStat: Identifiable {
  let id: UUID
  let stat: HKQuantity?
  let date: Date

  init(id: UUID = UUID(), stat: HKQuantity?, date: Date) {
    self.id = id
    self.stat = stat
    self.date = date
  }
}

现在您可以测试传递给模型的任何 id 是否存储在 id 中。而且,在生产代码中,它将获得使用 UUID().

创建的默认 UUID

但是如何测试这种东西有无数种。

我想这是依赖注入的最基本版本。本例中的依赖项是 UUID 的创建。你必须注入它才能使其可测试。

搜索 Swift 依赖注入以详细了解它可以为您做什么。

您无法测试 UUID 是什么。只需测试新实例化的对象 是否具有 UUID 然后走开。做多了就意味着你在测试 UUID 本身,那是错误的——它不是被测对象,也不属于你。

(一般来说,不要以 100% 的覆盖率为目标。这太疯狂了。80% 是一个不错的目标。)