当前位置: 首页 > 面试题库 >

模拟Java枚举以添加值以测试失败情况

闻人浩波
2023-03-14
问题内容

我有一个 枚举 开关或多或少是这样的:

public static enum MyEnum {A, B}

public int foo(MyEnum value) {
    switch(value) {
        case(A): return calculateSomething();
        case(B): return calculateSomethingElse();
    }
    throw new IllegalArgumentException("Do not know how to handle " + value);
}

并且我希望测试涵盖所有行,但是由于期望代码能够处理所有可能性,因此如果没有在开关中使用其相应的case语句,则无法提供值。

扩展枚举以添加额外的值是不可能的,并且仅模拟equals方法false也无法返回任何方法,因为生成的字节码使用了幕后的跳转表来进行适当处理…因此,我想使用PowerMock之类的东西也许可以实现一些黑魔法。

谢谢!

编辑

当我拥有枚举时,我以为我可以在值上添加一个方法,从而完全避免切换问题。但是我仍然要提这个问题,因为它仍然很有趣。


问题答案:

如果可以将Maven用作构建系统,则可以使用更简单的方法。只需在测试类路径中使用附加常量定义相同的枚举即可。

假设您在源目录(src / main / java)下声明了枚举,如下所示:

package my.package;

public enum MyEnum {
    A,
    B
}

现在,您可以在测试源目录(src / test / java)中声明完全相同的枚举,如下所示:

package my.package

public enum MyEnum {
    A,
    B,
    C
}

测试将看到带有“重载”枚举的testclass路径,并且您可以使用“
C”枚举常量测试代码。然后,您应该看到IllegalArgumentException。

使用Maven 3.5.2,AdoptOpenJDK 11.0.3和IntelliJ IDEA 2019.3.1在Windows下进行了测试



 类似资料:
  • 问题内容: 我想采用一个现有的枚举,并向其添加更多元素,如下所示: 这在Java中可行吗? 问题答案: 不,你无法使用Java执行此操作。除了别的什么,d大概就是A(扩展的“正常”想法)的一个实例,但是只知道这一点的用户却一无所知-这违背了枚举作为一组众所周知的集合的观点。价值观。 如果你可以告诉我们更多有关如何使用它的信息,我们可能会建议其他解决方案。

  • 问题内容: 我有一个枚举,看起来像 我想做类似的事情 我出于教学目的简化了该示例,但是对于我的实际示例而言,这对我真的很有用。我可以用Java做到吗? 问题答案: 是的Enum是Java中的类: 但是在您的真实系统中,由于有固定类型的动物,我也将其设为Enum。 还要注意,使任何实例变量也很重要。 您可以在Java Language Specification中 找到有关它的更多详细信息。

  • 问题内容: 我正在操场上进行测试,不确定如何执行此操作。对于没有关联值的普通枚举,一切都很好。 但是,如果我的一个枚举具有关联的值,则方向测试将因以下错误而失败:找不到成员“ West” 我该怎么做才能进行这项测试? 问题答案: 枚举的原始值为时,将自动进行枚举。在您的第一种情况下,假定原始值为,但是如果您给它指定另一个特定类型(例如或),它将有效。 但是,一旦添加了关联值,就不会再发生这种自动符

  • 我在AVO模式中有一个枚举,如下所示: 当使用完全(即向后和向前)兼容模式时,我应该如何向枚举添加新符号?这不可能吗? 我阅读了Avro模式:向现有模式添加枚举值是否向后兼容?但无济于事。 每当我试图向符号添加一个新值时,它都会在模式注册表中的兼容性检查中失败,即使我在枚举中有一个默认值。经过一点测试,似乎添加一个新值是向后兼容的,而不是向前兼容的。然而,由于我设置的默认值,我希望它也是向前兼容的

  • 问题内容: 这是我要完成的工作,我有一个包含一些值的枚举的类,我想对该类进行子类化并向该枚举添加更多值。这是一个不好的例子,但是: 因此HexDigits.Digit包含所有十六进制数字。那可能吗? 问题答案: 不,这不可能。最好的办法是使两个枚举实现和接口,然后使用该接口代替枚举。所以:

  • 编辑:更新了描述和错误信息,并添加了一些图像。仍然有这个问题。 我有一个奇怪的错误,在运行浓缩咖啡测试时多次发生。在几次成功的测试运行后,测试开始失败,出现以下异常: 我有一个简单的应用程序导航到页面只是包含文本在这一点上,测试应该导航到每个页面和识别这个文本。 这种故障只发生在真正的设备上。在仿真装置上,测试效果良好。参见下面的图像。 所有测试都由gradle脚本执行,从删除以前的应用程序和测试