在测试类中模拟私有枚举

时间:2013-06-04 03:50:27

标签: java unit-testing junit easymock powermock

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

public class GenerateMove {

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


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

}

我无法模拟Command枚举。有没有这样做?否则,我如何测试// do something方法中的move()代码?

感谢。

2 个答案:

答案 0 :(得分:3)

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

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

如果您不希望此枚举远远地暴露 ,您可以将其范围更改为package-private(通过删除private),并将您的测试方法更改为相同的类路径。这样,您的测试方法就可以使用枚举,并且您将能够根据传递给它的内容验证结果。

没有任何理由嘲笑 - 你应该传递真实数据并测试该枚举的所有情况是彻底的。

答案 1 :(得分:0)

我认为不需要嘲笑枚举。您可以直接使用枚举成员。 要测试您的移动方法,所有关于您拥有的代码都是如此。如果您有任何外部依赖类对象,Mocking将帮助您。