在单元测试中运行时,Spring引导组件面临nullpointer

时间:2018-05-29 08:51:00

标签: java spring unit-testing spring-boot

我的Spring Boot应用程序有Controller,它使用Service使用我创建的bean(SharkMaster),该bean使用properties文件中的某些值。

当我在常规模式下运行应用时,它可以正常工作。

但是,当尝试为控制器类运行单元测试并为其提供模拟service时,它会尝试创建真正的SharkMaster bean并失败,因为它无法从中找到值配置。

我看到several posts并阅读了一些关于类似问题的blog posts,但在当前阶段,当尝试在单元测试模式下运行时,应用程序在NullPointer崩溃。

@Configuration
public class SharkMaster{

@Value("${sharkName}")
private String sharkName;

public SharkMaster(){
  // sharkName is null here and the NullPointer is thrown
}

Controller测试类:

@RunWith(SpringRunner.class)
@WebMvcTest(SharkController.class)
@ContextConfiguration(classes = {SharkMaster.class})
@TestPropertySource("classpath:application-test.yml")
public class SharkControllerTest {

@Autowired
private MockMvc mockMvc;

@MockBean
private SharkService sharkService;

我尝试将@PropertySource("classpath:application-test.yml")添加到Controller测试类,但它没有帮助。

我认为这个问题与this one不一样,因为在单元测试阶段就是这里的情况。

1 个答案:

答案 0 :(得分:1)

删除@ContextConfiguration并尝试这样做。

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = SharkController.class)
public class SharkControllerTest {

@Autowired
private MockMvc mockMvc;

@InjectMocks
private SharkService sharkService;

@Mock
private SharkMaster sharkMaster;

.......
}