结构 属性 初始化测试
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% 是一个不错的目标。)
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 的创建。你必须注入它才能使其可测试。
搜索 Swift 依赖注入以详细了解它可以为您做什么。
您无法测试 UUID 是什么。只需测试新实例化的对象 是否具有 UUID 然后走开。做多了就意味着你在测试 UUID 本身,那是错误的——它不是被测对象,也不属于你。
(一般来说,不要以 100% 的覆盖率为目标。这太疯狂了。80% 是一个不错的目标。)