繁体   English   中英

EasyMock期待私有方法调用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM