gpt4 book ai didi

java - 为 Junit 测试创建模拟枚举值时出错

转载 作者:行者123 更新时间:2023-12-02 11:04:06 24 4
gpt4 key购买 nike

我有一个枚举类:-

public enum Action {
LOGGED_IN("logged_in"),
LOGGED_OUT("logged_out"),
private final String action;

/**
* @param action
*/
private Action(String action) {
this.action = action;
}

/**Fetches the action.
* @return String action
*/
public String getAction() {
return this.action;
}
}

我正在编写下面的 Junit 来模拟这个枚举类,以便我可以向此 Action 添加另一个枚举值以进行 junit 测试。

@RunWith(PowerMockRunner.class)
public class TestClass{

public Action action;

@Test
@PrepareForTest(Action.class)
public void testgetFeatureIdNull() NoSuchFieldException, SecurityException {
Action dummy = PowerMockito.mock(Action.class);
Field value=Action.class.getDeclaredField("value");
value.setAccessible(true);
Whitebox.setInternalState(dummy, "value", "dummy");
Whitebox.setInternalState(dummy,"ordinal", 2);
request = "{" + " opportunityNumber: 45," + " id: 1," + " " + " s: {" + " id: 23"
+ " }" + "}";
action = Action.LOGGED_IN;
assertEquals(null, PatternGenertor.getFeatureid(dummy, request));
}

运行此代码时,我收到以下错误:-

java.lang.NoSuchFieldException: value
at java.lang.Class.getDeclaredField(Unknown Source)

谁能告诉我我哪里做错了?

最佳答案

我可能会在这里给出一个不太适合问题的答案,但无论如何我都会尝试。 IMO 你不应该真正向 Enum 添加值。这对于枚举来说是没有意义的。

枚举是包含程序使用的可能值的列表的东西。如果您在模拟中向其添加更多值,就好像在说 - 嘿,我不想再测试我的代码,但我想测试现实生活中从未发生过的事情。这听起来不对。

相反,您可能应该问自己“您到底想测试什么”并更改测试逻辑,以便它仅依赖于从枚举返回的“真实”值。

我什至可以说,在我的实践中,我从未需要使用任何工具来模拟枚举,尽管它可能对答案没有贡献:)

此外,您现在必须使用 PowerMock,这是一个非常繁重且令人不愉快的工具(事实上,我们的许多同事认为只有当您必须测试无法使用的遗留代码时才应该使用它) -一个人想要改变)。

关于java - 为 Junit 测试创建模拟枚举值时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51108519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com