当前位置: 首页 > 知识库问答 >
问题:

Spring Boot组件在单元测试[重复]中运行时面对nullpointer

甄正信
2023-03-14

我的Spring Boot应用程序有一个控制器,它使用一个服务,该服务使用我创建的bean(sharkmaster),该bean使用properties文件中的一些值。

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

但是,当尝试为controller类运行单元测试,并为其提供模拟服务时,它试图创建真正的SharkMaster bean,但由于无法从配置中找到值而失败。

我看到了几篇文章,也读了一些关于类似问题的博客文章,但在当前阶段,当尝试在单元测试模式下运行时,应用程序正在nullpointer中崩溃。

@Configuration
public class SharkMaster{

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

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

控制器测试类:

@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测试类,但没有帮助。

我相信这个问题和这个问题不一样,因为这里的情况是在单元测试阶段。

共有1个答案

何晗昱
2023-03-14

删除您的@contextconfiguration并尝试这样做。

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

@Autowired
private MockMvc mockMvc;

@InjectMocks
private SharkService sharkService;

@Mock
private SharkMaster sharkMaster;

.......
}
 类似资料:
  • 我有以下测试: 这是好的,它可以运行,但是我想知道有没有一种方法可以将它作为单元测试而不是集成测试运行,并且仍然使用@mockbean@autowired。还是我错过了什么? 我试着只保留@ExtendWith(SpringExtension.class),但我得到一个关于找不到BookServiceImpl bean的异常。 我知道如何使用MockitoExtension和@mock、@inje

  • Django1.7引入了数据库迁移。 我知道忽略迁移可能是一个不好的做法,因为这部分代码将不会被测试。但事实并非如此:我在CI测试服务器(jenkins)中运行完整的迁移。我只想跳过本地测试中的迁移,因为速度很重要。 一些背景: 在Django1.6之前,在使用South时,我一直使用SOUTH_TESTS_MIGRATE设置: 可以使用--keepDB选项在测试运行之间保留测试数据库。这样做的好

  • 我有一个Android应用程序的测试套件,所有单元测试都运行良好。但是,每当我对一个单元测试类(例如,)进行一个更改时,当尝试再次运行该类时,我会得到以下消息 如果我做了一个gradle clean,然后再次运行类测试,它运行得很好(但需要4分钟来做……),但随后一个新的更改会再次破坏它。 有什么解决方法吗?我不确定应该发布哪种测试配置。我正在使用单元测试工件,我的测试位于文件夹中

  • 我想测试我的SpringBoot应用程序,它使用cassandra作为CrudRepository。我最终得到了 具有 和 这就导致了 如果我使用旧版本的cassandra-unit-Spring 它以NullPointerException结束,因为没有注入值repo。 来源https://github.com/StephanPraetsch/spring.boot.cassandra.unit

  • 时常组件在运行的时候需要配置你的步骤使用步骤并且迟绑定注入上下文从步骤或者是任务执行。这些是机警的测试像单独的组件除非你有一个办法设置上下文就像他们在一个步骤里执行。那是两个组件的目标在spring batch中:StepScopeTestExecutionListener 和 StepScopeTestUtils 这个监听是公开的在类级别中,它的工作是创建一个步骤为每个测试方法执行上下文。例如:

  • 我使用PyCharm来运行一个相当大的测试套件(1800个快速测试)。最近修改了一个测试,我意识到我的测试不会出错。当我单独运行这些测试时,确实会中断,但是如果我运行整个测试套件,它们总是会通过。这是由于一些以前的同事对类的这种不正确的嘲笑: 我现在需要检查整个测试套件中模拟的使用情况,但是我想单独运行每个测试,看看哪些测试没有通过(我将这些测试标记为高优先级)。我怎么能从控制台或Py魅力中做到这