具体来说,我正在使用一个使用枚举的单例模型。我有一个枚举单例服务(业务逻辑)调用一个枚举单例 dao。我想为我的服务编写单元测试,但我不能模拟我的 enum dao,因为它是一个 enum 和 final。是的,我看到了关于用反射来做的文章,但如果可能的话,我宁愿避免这样做。
所以我的想法是,为什么不在我的枚举中添加另一个值 TEST_INSTANCE 呢?(这确实是核心问题。)
public enum MyDao {
INSTANCE,
TEST_INSTANCE;
public boolean methodIWouldMockIfICould()
{
if(this == TEST_INSTANCE) { return true; }
... //method code here
}
}
尝试这个似乎最初有效,但我很犹豫。
- 这对我来说有难闻的气味。
- 假设部署到我的 Web 应用程序的代码仅使用 INSTANCE 并且唯一使用 TEST_INSTANCE 的地方是在测试中,这个枚举是否仍然遵循单例模型?
- 这还有什么我没有考虑的不好的地方吗?
非常感谢你,-马特
编辑我很想将 Spring 用于 DI,但我不允许这样做。遗留系统和上级只是简单地说“不,还没有”。我希望它会来,但我还不允许,所以这是我在此期间的解决方案。