我试图了解如何使用Mockito进行模拟,但我不知道如何处理以下情况:
public class Foo { private final int secret; public Foo(int s) { secret = s; } public void bar() { int sum = sum(0); } private int sum(int i) { if (i == 1) { return i * secret; } secret -= i; return i; } }
我正在尝试模拟Foo并测试sum
的行为是否正确,但我很难决定如何以最小的影响做到最好。我应该将sum
方法更改为公开吗?你如何测试这种行为?
答案 0 :(得分:0)
你的例子非常神秘,很难理解方法的目的。
您说您正在尝试测试sum
的行为是否正确。要做到这一点,你可能不应该嘲笑Foo
。之一:
sum
的功能
secret
字段的方法和状态移动到另一个可以将sum公开为公共方法的类。将方法公开用于测试是不可取的,这通常意味着您没有正确的设计,重组代码会更有益。
答案 1 :(得分:0)
你无法使用mockito模拟私有方法。试试powermock
查看mockito页面有关模拟私有方法的内容。 https://code.google.com/p/mockito/wiki/MockitoAndPrivateMethods
答案 2 :(得分:0)
你有4种方法可以做到这一点:
@VisibleForTesting
很难说哪一个最适合你,这取决于具体情况