在为双向转换器编写单元测试时,我想知道单元测试仅覆盖一个方向是否足够。假设一个转换器从 a -> b
和 b -> a
转换:
class Converter<A, B> {
B convertToB(A a) { /* ... */ }
A convertToA(B b) { /* ... */ }
}
或者更正式地说:
f(a) = b
f(b) = a
标准单元测试必须测试两个转换方向。然而,编写像 f(f(a)) == a
这样的测试非常容易。假设 f(a) == b
被单元测试覆盖。这些测试中哪些是必要的,
足以覆盖 f(b) == a
?
(1) f(f(a)) == a
(2) f(f(b)) == b
(3) f(f(a)) == a && f(f(b)) == b
还是我们必须测试
(4) f(b) == a
最佳答案
从数学理论来看:
如果f(a) == b
给出你可以说:
f(f(a)) == a
可以评估为f(b) == a
因此足以进行测试。f(f(b)) == b
不足以测试!那是因为你没有证明f(b) == a
.如果你只是证明f(f(b)) == b
, 可能给出f(b) == b
!
关于java - 单元测试双向转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35010081/