【问题标题】:NullPointerException when trying to autowire configuration properties running with MockitoJUnitRunner尝试自动装配使用 MockitoJUnitRunner 运行的配置属性时出现 NullPointerException
【发布时间】:2019-06-04 08:20:34
【问题描述】:

我一直在尝试在我的测试类中使用配置属性,但找不到这样做的方法,因为我总是得到 NullPointerException。

应用程序.yaml

affix:
  lover: 'interests'
  social: 'social_media'

YamlConfig.java

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
@EnableAutoConfiguration
@Data
public class YamlConfig {
    private HashMap<String, String> affix;
}

Service.java

@Autowired
private YamlConfig config;

...

setFeatureName(config.getAffix().get("social"));
// supposed to return social_media

上面的代码在我的服务中运行良好,但是当我尝试在我的测试类中使用配置属性时,它不起作用。

ServiceTest.java

@RunWith(MockitoJUnitRunner.class)
public class MetadataServiceTest {
@Autowired
private YamlConfig config;

@Test
public void testPropertiesNotNull() {
  assertNotNull(config.getAffix().get("social"));
}

我也尝试了其他注释,但它们似乎都不起作用。大多数示例都使用 JUnitRunner 运行测试,我不确定这是否是它们无法在我的测试类上运行的原因。

有没有办法在不模拟整个事情的情况下使用 MockitoJUnitRunner 在测试类中使用配置属性(实际配置非常大,很难模拟每个结果)?

【问题讨论】:

  • 你没有在 spring 上下文中开始你的测试,因此@Autowired 没有被选中,所以没有注入任何东西。使用模拟或弹簧,不要将它们混合使用。 (我建议模拟)

标签: java spring spring-boot mockito


【解决方案1】:

您在测试中的@Autowired 将被忽略,因为您没有选择任何 Spring 上下文。使其成为带有注释的集成 Spring 测试。

【讨论】:

  • 能否请您提供确切的注释,我只是迷路了。
  • @clumsy.kitten @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = YamlConfig.class) 类似这样的事情,但请记住,它有其后果。阅读 Spring 中的集成测试 docs.spring.io/spring/docs/current/spring-framework-reference/…
  • 非常感谢!我试试看:)
【解决方案2】:

由于您使用的是@Autowired 注解,因此您应该使用例如:@RunWith(SpringJUnit4ClassRunner.class)

这样你就可以在 spring 上下文中开始你的测试了。

但是如果你仍然想使用 MockitoJUnitRunner,你可以使用 @Autowired 而不是: @InjectMocks 私有 YamlConfig 配置;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 2013-12-26
    • 2012-01-01
    • 2015-03-08
    • 1970-01-01
    • 2017-11-08
    • 2018-12-10
    相关资源
    最近更新 更多