相关疑难解决方法(0)

枚举值的单元测试不存在?

一些示例代码首先......

枚举:

public enum TestEnum {
   YES,
   NO
}
Run Code Online (Sandbox Code Playgroud)

一些代码:

public static boolean WorkTheEnum(TestEnum theEnum) {
   switch (theEnum) {
      case YES:
         return true;
      case NO:
         return false;
      default:
         // throws an exception here
   }
}
Run Code Online (Sandbox Code Playgroud)

问题:
TestEnum是我从不同开发人员的不同代码导入的东西.所以它实际上可以改变.对于这种情况,我想要一个实际检查该非现有值的单元测试.但我根本不知道如何用Mockito和JUnit做到这一点.

这部分当然不起作用:

@Test(expected=Exception.class)
public void DoesNotExist_throwsException() throws Exception {
    when(TestEnum.MAYBE).thenReturn(TestEnum.MAYBE);
    WorkTheEnum(TestEnum.MAYBE);
}
Run Code Online (Sandbox Code Playgroud)

我发现了一个使用PowerMock的例子,但我无法与Mockito合作.

有任何想法吗?

java junit mockito

14
推荐指数
2
解决办法
1万
查看次数

有没有办法将枚举转换为其他枚举?

我正在尝试为 1.7.10 制作一个模组(我知道,已经过时了,但我认为在这种情况下这并不重要),将一些模组与 CustomNPC 合并,基本上添加了一些看起来和工作起来都像 CustomNPC 的武器武器但由不同模组的材料制成。由于某种原因,mod 提供的防护罩需要在其构造函数中使用特定的枚举:

public class ItemShield extends ItemNpcInterface {

  public EnumNpcToolMaterial material;
  
  public ItemShield(int par1, EnumNpcToolMaterial material) {
    super(par1);
    this.material = material;
    setMaxDamage(material.getMaxUses());
    setCreativeTab((CreativeTabs)CustomItems.tabWeapon);
  }
Run Code Online (Sandbox Code Playgroud)

枚举存储材料类型及其所有值。我不想编辑该模组本身的代码,但我想向其中添加更多材料。有没有办法向该枚举添加一些内容,或者可以将具有不同材料的相同枚举转换为这种类型?

我已经找到了一种解决方法,通过创建一个自定义屏蔽类,该类只需从我的自定义枚举中获取值,但我很好奇是否有一种方法可以在不添加新类的情况下做到这一点。

编辑

我想我会添加 mod 的 EnumNpcToolMaterial,这样就更清楚屏蔽构造函数到底想要什么

public enum EnumNpcToolMaterial {
  WOOD(0, 59, 2.0F, 0, 15),
  STONE(1, 131, 4.0F, 1, 5),
  BRONZE(2, 170, 5.0F, 2, 15),
  IRON(2, 250, 6.0F, 2, 14),
  DIA(3, 1561, 8.0F, 3, 10),
  GOLD(0, 32, 12.0F, 1, 22),
  EMERALD(3, 1000, 8.0F, 4, 10),
  DEMONIC(3, 100, 8.0F, 6, …
Run Code Online (Sandbox Code Playgroud)

java enums minecraft minecraft-forge

5
推荐指数
1
解决办法
269
查看次数

在Java中是否可以更改或修改枚举本身,从而破坏枚举单例?

是否有可能以某种方式在运行时更改枚举?例如使用反射.问题不是要改变枚举常量的状态.它将要更改枚举的常量集或删除任何常量.

关于以下枚举,是否可以添加颜色WHITE或删除颜色RED或更改其顺序?

public enum Color {

  RED, GREEN, BLUE;

}
Run Code Online (Sandbox Code Playgroud)

我为什么这么问?

我知道这个问题有点恶意.但即使是约书亚布洛赫在谈论(1)关于实施单身人士并推荐了枚举单身人士模式时也提到了" 巧妙制造的攻击 ".如果我们可以修改枚举,那么对这种模式的攻击是否可行?

我试图解决它并部分管理它.我将发布我的结果作为答案 - 遵循这个建议.


(1)请参阅在Java中实现单例模式的有效方法是什么?其中包含指向effective_java_reloaded.pdf的链接,第31页.

java reflection singleton enums

4
推荐指数
2
解决办法
594
查看次数