我知道可以模拟单个枚举(使用How to mock an enum singleton class using Mockito/Powermock?),但我有1000个枚举值,它们可以调用5个不同的构造函数。枚举值通常在开发中发生变化。
我想真的只为我的JUnit测试模拟一两个。我不关心其余部分,但它们仍然是实例化的,它会调用一些令人讨厌的东西,它们会从文件系统中加载枚举的值。
是的,我知道这是非常糟糕的设计。但是现在我没有时间去改变它。
目前我们正在使用Mockito / powermock。但任何可以解决这个问题的框架我都意味着糟糕的设计是受欢迎的。
我们说我的枚举类似于:
public static enum MyEnum {
A(OtherEnum.CONSTANT),
B("1"),
C("1", OtherEnum.CONSTANT),
//...and so on for again 1000 enum values :(
private double value;
private String defaultValue;
private OtherEnum value;
/* Getter/Setter */
/* constructors */
}
答案 0 :(得分:1)
我同意Nick-Holt建议添加界面:
public interface myInterface{
//add the getters/setters you want to test
}
public enum MyEnum implements MyInterface{
//no changes needed to the implementations
//since they already implement the methods you want to use
}
现在你可以使用Mockito的普通模拟能力,而不必依赖Powermock
MyInterface mock = Mockito.mock(MyInterface.class);
when(mock.foo()).thenReturn(...);
//..etc