假设我有一个看起来像这样的方法:
public static String[] parseFoo(Foo anObject){
Foo anotherObject = parseFoo2(anObject);
...
}
private static Foo parseFoo2(Foo anObject){
...
}
这两个方法都在同一个类中。 parseFoo2 只是帮助 parseFoo 完成一些事情的辅助方法。我正在尝试测试方法 parseFoo。 EasyMock 中有没有人可以在 parseFoo2 的私有(private)方法调用上指定返回值,就像我可以使用
指定对象的实例方法调用一样EasyMock.createMock(...);
anObject.expect(...).andReturn(...);
因为我想测试公共(public)方法,但我不想进入私有(private)方法并测试里面的实现。
谢谢
最佳答案
不要这样做。 一个好的单元测试的基石之一是它应该尽可能少地依赖实现细节。模拟一个私有(private) 方法就是这样。
为什么? 因为这会使您的单元测试非常脆弱。考虑这样一种情况,您在一周内返回此代码并决定您并不真正需要方法 parseFoo2 并且您实际上想要内联它的代码。或者您想将此方法拆分为两个或多个更小的方法。所有非常有效的重构实践 - 但它们会破坏单元测试!
您不希望每次进行这样的简单重构时都进行单元测试。因此,模拟私有(private)方法被认为是不好的做法。
关于java - EasyMock 期待私有(private)方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11833945/