gpt4 book ai didi

java - 使用 Mockito/JUnit 模拟 Java 常量变量(公共(public)静态)

转载 作者:行者123 更新时间:2023-12-01 23:58:40 36 4
gpt4 key购买 nike

我需要模拟常量变量才能测试我的方法之一。我怎样才能用 Mokito 和 Junit 做到这一点。

  @Component( "mybean" )
@org.springframework.context.annotation.Scope( value="session" )
public class MyBean {

Public void methodToBeTested() {
if (!AppConst.SOME_CONST.equals(obj.getCostCode())) {
// some logic
}
}
}

AppConst 类

@Configuration
public class AppConst
{
public static String SOME_CONST;
public static String HOST_URL;

@PostConstruct
public void postConstruct()
{
SOME_CONST = "My Code";
HOST_URL = "Some URL";

}
}

那么,在我的 junit 测试类中,如何模拟 AppConst 及其变量?现在,当我运行它时,我遇到了空指针错误。

这可以用 powermock 来完成吗?如果是,请提供一些示例

我使用的 Mockito 版本。

编译“org.mockito:mockito-all:1.9.5”
编译“org.powermock:powermock-mockito-release-full:1.6.1”

最佳答案

除了 mock 之外,还有另一种解决方案可以测试它:

public void methodToBeTested(SomeObject obj) {
performLogic(AppConst.SOME_CONST, obj);
}

boolean performLogic(String check, SomeObject testObj) {
if (!check.equals(obj.getCostCode())) {
// some logic
return true;
}
return false;
}

这样您就可以测试两件事,两者结合起来表明您的代码按预期工作:

public void testMethodToBeTested() {
MyBean mb = new MyBean() {
@Override
void performLogic(String check, SomeObject testObj) {
assertSame("check constant is passed", AppConst.SOME_CONST, check);
}
}
mb.methodToBeTested(new SomeObject());

mb = new MyBean();
SomeObject so = createSomeTestObject("My Code"); // not the actual constant but an equal String
assertFalse("check some logic not occurred", mb.performLogic("My Code", so));
so = createSomeTestObject("Not the constant");
assertFalse("check some logic not occurred", mb.performLogic("Not the constant", so));
assertTrue("check some logic occurred", mb.performLogic("My Code", so));
// additional tests covering the actual logic
}

另一种解决方案是将 if 语句的条件放入其自己的方法中,例如shouldLogicOccurr(String check) 并单独测试该方法。

换句话说:有时有必要重构代码以使测试更容易,有时甚至根本不可能。一个好的副作用是,下次您实现一些已经考虑到可测试性的东西并首先创建适合于此的代码。

模拟是一种很好的方法来测试使用第三方库的东西,这些第三方库无法更改并且有太多的依赖项需要设置,但如果你最终将其用于你自己的代码,你就已经有了一个设计问题。

关于java - 使用 Mockito/JUnit 模拟 Java 常量变量(公共(public)静态),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58190692/

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