gpt4 book ai didi

java - 在 Java 中使用 Mockito 模拟枚举

转载 作者:搜寻专家 更新时间:2023-10-31 19:44:17 25 4
gpt4 key购买 nike

如何使用 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 不能模拟枚举,但一年多前也提供了答案。我可以同时模拟枚举还是让分支保持未经测试的状态?不能使用其他 Mocking 框架。

最佳答案

有两个答案:

a) 您可以求助于一些类似于 PowerMock 的模拟框架。我的两分(句子)在那里:不要那样做。 PowerMock 打开了一扇通向痛苦之地的大门;您不想输入的内容。

b) 将接口(interface)放在你的枚举上

认真的;我现在认为枚举只有一个好的用例;那就是将它们用作提供某种服务的单例。然后,我这样做:

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()

当然,当您像现在这样使用枚举时,这并没有多大帮助。但问题是:无论如何你都不应该那样使用枚举。因为以这种方式使用枚举会导致代码 splinter ——每个使用枚举变量的地方都需要这样的 switch 语句;当您添加/删除枚举案例时会产生所有负面后果。

因此,在你的情况下:考虑转向真正的 OO 设计——你有定义方法的抽象基类;然后您使用工厂创建子类(可能基于枚举开关),这些子类为您提供只做正确事情的对象。

关于java - 在 Java 中使用 Mockito 模拟枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38224517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com