我有一个带有简单if / else块的方法。在if和else块中都调用了一个私有方法。
下面是我想编写单元测试用例的方法。
public void enableBLEScan() {
if (<some boolean expression which can be mocked>) {
initializeScan();
} else {
stopScan();
}
}
我可以很容易地删除布尔表达式的行为。
但我想检查内部的方法调用if else block是否正确发生。我怎么能这样做?
答案 0 :(得分:1)
重点是:测试内部私有方法是否被调用...在编写单元测试时是一种反模式!
您不测试内部实施细节。对你的测试来说,一些“面向外部”的方法如何做它的作用并不重要。换句话说,您有以下选择:
换句话说:您的每个“公共”方法都应该具有明确的定义含义。所以,如果你打电话给他们,他们会有一个明确的效果;并且应该观察/断言这种效果。
很可能你当前的设计真的支持这些想法。然后,认真地:考虑退一步并改变你的设计。因为:你创造了一些不合理的可测试的东西。那么很可能......你的设计也存在其他问题。
答案 1 :(得分:0)
检查是否调用了私有方法并不是您应该尝试在单元测试中进行测试
这不是验收测试。通常,您希望测试类的行为和/或行为的结果。
在你的情况下,我看到两个清晰的可能性:
对于这种做法,我想你必须知道。
例如,您可以根据ScanState
和initializeScan()
中的逻辑在类中添加枚举字段stopScan()
。
ScanState
示例:
public enum ScanState{
(INITIALIZED, STOPPED)
}