java - EasyMock 期待私有(private)方法调用

标签 java unit-testing easymock

假设我有一个看起来像这样的方法:

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/

相关文章:

java - ./* 和 ./* 之间有什么区别? :./* 在 java 类路径中

java - PowerMock:如何默认返回null?

java - EasyMock 我这样做对吗?

java - EasyMock:在 java 中模拟构造函数调用

java - WebSphere 8.5 : unit testing & embeddable container

java - android.os.NetworkOnMainThreadException 如何调整在单独线程中运行的代码

javascript - YUI 测试和 DOM 测试

java - 如何让 Eclipse 2018.09 默认使用 JUnit 4 测试运行器?

python - 如何为文本解析器编写单元测试?

java - 如何检测 Mac OS X 中的 java 运行时?