【问题标题】:Mocking private enum inside tested class在测试类中模拟私有枚举
【发布时间】:2013-06-04 03:50:26
【问题描述】:

我正在使用 PowerMock/EasyMock 并想测试一个具有私有枚举的类,如下所示:

public class GenerateMove {

  private Command current;
  private enum Command {
    GO, BACK, TURN
  }


  public move() {
    if (Command.GO.equals(current)) {
     // do something
    }
  }

}

我无法模拟 Command 枚举。有办法这样做吗?不然怎么测试move()方法里面的// do something代码?

谢谢。

【问题讨论】:

  • 为什么不将Command 枚举设为“外部”枚举并让它生成GenerateMove 实例?枚举可以有方法等...

标签: java unit-testing junit easymock powermock


【解决方案1】:

通常,私有字段与内部函数或类的内部状态相关 - 本质上,它是您要测试的内容。

传入command,表示可以改变对象的状态,需要验证所有可以通过的可能状态。但是,通过枚举 private,您无法通过它,因为它不在任何其他包范围内。

如果您不希望此枚举暴露太多,您可以将其范围更改为包私有(通过删除private),并将您的测试方法放在同一个类路径中.这样,您的测试方法将能够使用枚举,并且您将能够根据传递给它的内容来验证结果。

没有任何理由对此进行模拟 - 您应该传递真实数据并测试该枚举的所有案例以使其彻底。

【讨论】:

    【解决方案2】:

    我认为不需要模拟枚举。您可以直接使用枚举成员。 要测试你的移动方法,关键在于你有什么代码。如果您有任何外部依赖类对象,模拟将帮助您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多