我正在使用PowerMock/EasyMock,并希望测试一个具有私有enum的类,如下所示:
public class GenerateMove {
private Command current;
private enum Command {
GO, BACK, TURN
}
public move() {
if (Command.GO.equals(current)) {
// do something
}
}
}
我无法模拟命令枚举。有办法这样做吗?否则我如何测试move()
方法中的// do something
代码?
谢谢。
通常,私有字段与内部函数或类的内部状态相关-本质上,它是您要测试的东西。
通过传入command
,表明您可以改变对象的状态,您需要验证所有可能通过的状态。但是,通过枚举private
, 不能传递它,因为它不在任何其他包作用域中。
如果您不希望这个枚举暴露得太远,您可以将其作用域更改为package-private(通过删除private
),并将您的测试方法置于相同的类路径中。这样,您的测试方法将能够使用枚举,并且您将能够根据您传递给它的内容来验证您的结果。
没有任何理由去模拟——您应该传递真实的数据,并测试该枚举的所有用例,以确保彻底。
我认为没有必要模拟枚举。可以直接使用枚举成员。要测试move方法,关键在于你有什么代码。如果您有任何外部依赖的类对象,那么mock将对您有所帮助。