[英]EasyMock expecting private method calls
让我们说我有一个看起来像这样的方法:
public static String[] parseFoo(Foo anObject){
Foo anotherObject = parseFoo2(anObject);
...
}
private static Foo parseFoo2(Foo anObject){
...
}
并且两种方法都属于同一类。 parseFoo2只是一个辅助方法,可以帮助parseFoo完成一些事情。 我正在尝试测试方法parseFoo。 在EasyMock中是否有人可以在parseFoo2的私有方法调用上指定返回值,就像我可以为对象指定实例方法调用一样
EasyMock.createMock(...);
anObject.expect(...).andReturn(...);
因为我想测试公共方法,但我不想进入私有方法并测试里面的实现。
谢谢
不要这样做。 良好的单元测试的一个基石是它应该尽可能少地依赖于实现细节。 嘲笑私有方法就是这样。
为什么? 因为这会使你的单元测试变得非常脆弱。 考虑一下你在一周内回到这段代码的情况,并确定你真的不需要方法parseFoo2,而你实际上想要内联它的代码。 或者您想将此方法拆分为两个或更多较小的方法。 所有非常有效的重构实践 - 但它们将打破单元测试!
每次进行这样的简单重构时,您都不希望追逐单元测试。 因此,模拟私有方法被认为是不好的做法。
如果您发现必须模拟私有方法,则可以使用PowerMock.expectPrivate()
。 EasyMock无法模拟私有方法。
如果您仍想使用EasyMock,因为更改它并不依赖于您(在企业中工作),您可以使用反射来更改方法返回的私有字段,或者任何私有字段。
例如,您可以在辅助类中使用这些方法。 并根据需要使用它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.