我应该在基于 属性 的测试中重新实现逻辑吗?
Should I reimplement the logic in property based test?
假设有一个函数可以确定按钮是否应该可见。
fun isButtonVisible(fitlers: List<Filters>, results: List<Shop>, isLoading: Boolean) {
return fitlers.isNotEmpty() && results.isEmpty() && !isLoading
}
现在我想使用 PBT 测试此功能,例如:
"the button should be visible if filters is not empty and results is empty and is not loading" {
forAll { filters: List<Filters>, results: List<Shop>, isLoading: Boolean ->
val actual = isButtonVisible(filters, results, isLoading)
// Here reimplement the logic
val expected = filters.isNotEmpty() && results.isEmpty() && !isLoading
assertThat(actual).isEqual(expected)
}
}
看来我只是在测试中重新实现了逻辑,这是正确的吗?如果不是,如果逻辑只是几个标志的简单组合,我怎么能想出另一个属性?
这是不对的。
你不应该在测试期间计算期望值应该是多少,你应该知道结果应该是什么,这样设置并与实际结果进行比较。
测试通过调用您要测试的方法并将结果与已知的预期值进行比较来工作。
"the button should be visible when filters are not empty, results is empty, isLoading is false " {
forAll { filters: List<Filters>, results: List<Shop>, isLoading: Boolean ->
val actualVisibleFlag = isButtonVisible(filters, results, isLoading)
val expectedVisibleFlag = true
assertThat(actualVisibleFlag ).isEqual(expectedVisibleFlag )
}
}
你的期望值是已知的,这就是我要表达的观点。
对于每个输入组合,您创建一个新测试。
这里的想法是,当你有一个错误时,你可以很容易地看到哪个现有测试失败了,或者你可以添加一个新的测试来突出显示错误。
如果你调用一个方法,给你你认为你应该得到的结果,那么,你怎么知道那个方法是正确的呢?你怎么知道它对每个组合都正确工作?
如果你减少标志的数量,你可能会减少测试,你真的需要 4 个吗?
现在,每种语言/框架都支持(或应该支持)矩阵之类的东西,因此您可以轻松地编写每个组合的值
假设有一个函数可以确定按钮是否应该可见。
fun isButtonVisible(fitlers: List<Filters>, results: List<Shop>, isLoading: Boolean) {
return fitlers.isNotEmpty() && results.isEmpty() && !isLoading
}
现在我想使用 PBT 测试此功能,例如:
"the button should be visible if filters is not empty and results is empty and is not loading" {
forAll { filters: List<Filters>, results: List<Shop>, isLoading: Boolean ->
val actual = isButtonVisible(filters, results, isLoading)
// Here reimplement the logic
val expected = filters.isNotEmpty() && results.isEmpty() && !isLoading
assertThat(actual).isEqual(expected)
}
}
看来我只是在测试中重新实现了逻辑,这是正确的吗?如果不是,如果逻辑只是几个标志的简单组合,我怎么能想出另一个属性?
这是不对的。
你不应该在测试期间计算期望值应该是多少,你应该知道结果应该是什么,这样设置并与实际结果进行比较。
测试通过调用您要测试的方法并将结果与已知的预期值进行比较来工作。
"the button should be visible when filters are not empty, results is empty, isLoading is false " {
forAll { filters: List<Filters>, results: List<Shop>, isLoading: Boolean ->
val actualVisibleFlag = isButtonVisible(filters, results, isLoading)
val expectedVisibleFlag = true
assertThat(actualVisibleFlag ).isEqual(expectedVisibleFlag )
}
}
你的期望值是已知的,这就是我要表达的观点。 对于每个输入组合,您创建一个新测试。
这里的想法是,当你有一个错误时,你可以很容易地看到哪个现有测试失败了,或者你可以添加一个新的测试来突出显示错误。
如果你调用一个方法,给你你认为你应该得到的结果,那么,你怎么知道那个方法是正确的呢?你怎么知道它对每个组合都正确工作?
如果你减少标志的数量,你可能会减少测试,你真的需要 4 个吗?
现在,每种语言/框架都支持(或应该支持)矩阵之类的东西,因此您可以轻松地编写每个组合的值