有一个@Value注释的常量,在运行测试时不会初始化,当构造函数中需要它时,它会抛出NullPointerException。
要测试的示例类:
class TestClass {
@Value("${test.value1}")
private String value1;
private final TestTemplate testTemplate;
public TestClass(TestTemplateBuilder builder) {
testTemplate = builder.someMethod(value1).build();
}
---
}
示例测试类:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = TestClass.class)
@SpringBootTest
class TestClassTest {
@MockBean
TestTemplateBuilder builder;
@Autowired
TestClass testClass = new TestClass(testTemplate);
@Before
public void setUp() {
ReflectionTestUtils.setField(testClass, "value1", "VALUE");
Mockito.when(builder.build()).thenReturn(new TestTemplate());
}
---
}
事情尝试了,但没有任何效果:
@SpringBootTest(属性={“test.value1=VALUE”})
我也尝试了一些其他的东西,但我得到的是NullPoiterException
at
someMethod(value1)
。
版本:
Java:1.8
只是为了确保(因为在问题中,它没有显示):classTestClass
是Springbean
(组件、服务?
编辑(
TestClass
is组件):
这不是创建Spring bean的方式;
如果TestClass的构造函数需要@Value,那么只有Spring才能保证在实例化TestClass之前。值1可用。因此,您可以将字符串value1添加到构造函数中,并设置value1属性。
请阅读Spring的注入方式。
我没能解决主要问题,但我像这样满足了我的要求。
class TestClassTest {
TestClass testClass;
@Before
public void setUp() {
TestTemplateBuilder builder = Mockito.mock(TestTemplateBuilder.clsss);
TestTemplateBuilder builder1 = Mockito.mock(TestTemplateBuilder.clsss);
Mockito.when(builder.someMethod(nullable(String.class))).thenReturn(builder1);
Mockito.when(builder1.build()).thenReturn(new TestTemplate());
testClass = new TestClass(builder);
}
---
}
这可能不是正确的做法。
获得NullPointerException的原因是,值注入发生在构造函数调用之后。为了防止这种情况,可以在构造函数调用后使用spring生命周期挂钩初始化类。
问题内容: 我正在运行一个简单的JUnit测试,又是一个应用程序DAO。问题是我总是得到: JUnit测试是: 如你所见,我明确声明不回滚此方法。 Spring JUnit支持是否总是将rollback设置为true? 问题答案: 它应该可以正常工作,就像你期望的那样,但是可能是你在被测类中打开了另一个事务,或者某个地方有其他功能/或错误。 顺便说一句,这个注释应该是足够的:
我在测试类的顶部有以下内容: 通过调试,我可以确认messageSource属性正在被模拟,并且不为null。测试用例最终达到这一点: 我确认我的消息属性文件中包含带有消息字符串的代码“DATA. IS. EMPTY”。我知道消息属性文件配置正确,因为我看到应用程序运行时消息出现在应用程序中。但是,在JUnit测试用例中,上面的getMessage返回为null。查看MessageSource的S
我的测试类看起来像这样 在设置方法中,wac 始终为空。从spring boot文档中,总是创建一个模拟。 所以我希望它会在上面的代码中自动绑定,但这不会发生。 有人可以告诉我在这种情况下如何创建,以便它不像我的情况那样为空吗? 我正在运行spring boot测试,从带有springboot注释的类中调用它们。 测试(springboottest)和调用类(springboot)应用程序都位于下
我已经检查了IntelliJ的调试器,并且可以确认mockMvc本身为空。因此,异常消息告诉我的只是“java.lang.NullPointerException”。 我已经尝试过为测试类添加更通用的Spring Boot注释,比如“@SpringBootTest”或“@RunWith(SpringRunner.class)”,以防与初始化Spring有关,但没有成功。
在使用JUnit进行测试时,我无法理解一些事情,我编写了一些测试,而有些测试似乎可以简单地使用 而且 有些似乎不能与它们一起工作,所以我必须使用 而且 我理解@mockbean是在处理spring容器时使用的,而@mock只是用来复制/模拟某个类及其方法。但是什么时候才是使用@mockbean的最佳时机呢? 上面是我在spring boot应用程序中为一个控制器编写的测试,但当我使用@mock模拟
问题内容: 因此,我有一个简单的属性文件,其中包含以下条目: 该属性文件使用加载,该文件引用了上面的属性文件。 我有以下课程,为此,我正在尝试加载这些属性,如下所示: 问题是,并且总是为空…但是在我的控制器中,该值正好被加载。是什么赋予了? 问题答案: 如果通过手动实例化的实例,则不会涉及Spring,因此注释将被忽略。 如果您无法更改代码以使Spring实例化bean(也许使用-scoped b