如何使用Mockito模拟枚举以进行测试?给出枚举的这个示例:
public enum TestEnum {
YES,
NO
}
这个用于使用枚举的方法:
public static boolean WorkTheEnum(TestEnum theEnum) {
switch (theEnum) {
case YES:
return true;
case NO:
return false;
default:
// throws an exception here
}
}
如何模拟枚举以达到开关循环的默认分支? This answer说Mockito不能模仿枚举,但答案也是在一年多前提供的.我可以同时嘲笑enum还是让我让分支保持未经测试?其他Mocking框架不能使用.
最佳答案
有两个答案:
a)你可以转向一些类似PowerMock的模拟框架.我在那里的两分钱(不足):不要这样做. PowerMock打开了通往痛苦之地的大门;你不想进入.
b)在你的枚举上放置接口
认真;我现在认为枚举只有一个好的用例;那就是将它们用作提供某种服务的单身人士.然后,我这样做:
public interface FooService { void foo(); }
class FooServiceImpl implements FooService { @Override void foo() ...
enum FooServiceProvider implements FooService {
INSTANCE;
private final FooService impl = new FooServiceImpl();
@Override foo() { impl.foo()
当然,当你使用像你这样的枚举时,这并没有什么帮助.但问题是:你不应该以这种方式使用枚举.因为以这种方式使用枚举导致破碎的代码 – 每个需要枚举变量的地方都需要这样的switch语句;添加/删除枚举案例时带来的所有负面后果.
因此,在您的情况下:考虑转向真正的OO设计 – 您可以使用定义方法的抽象基类;然后你使用工厂来创建子类(可能基于枚举开关),为你提供简单做对的东西.
相关文章
转载注明原文:使用Java中的Mockito模拟枚举 - 代码日志