尝试自动装配运行MockitoJUnitRunner的配置属性时发生NullPointerException

时间:2019-06-04 08:20:34

标签: java spring spring-boot mockito

我一直在尝试在测试类中使用配置属性,但是由于总是出现NullPointerException,所以找不到方法。

application.yaml

List<Item> snoozles =
    response.data
            .searches
            .stream() // Stream<Search>
            .flatMap(search -> search.apples.stream()) // Stream<Apple>
            .flatMap(apple -> apple.pears.stream()) // Stream<Pear>
            .flatMap(pear -> pear.sets.stream()) // Stream<Set>
            .flatMap(set -> set.items.stream()) // Stream<Item>
            .filter(item -> item.baz.fooz.unit.equals("snafu")) // Stream<Item>
            .collect(Collectors.toList()); // List<Item>

YamlConfig.java

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

Service.java

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

上面的代码在我的服务中可以正常工作,但是当我尝试在测试类中使用配置属性时,它不起作用。

ServiceTest.java

@Autowired
private YamlConfig config;

...

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

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

无论如何,是否有要使用MockitoJUnitRunner获得配置属性以在测试类中使用而不模拟整个过程(实际的配置非常大,很难为每个模拟结果)?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

这样,您将在春季上下文中开始测试。

但是,如果您仍然想使用MockitoJUnitRunner,则可以使用: @InjectMocks 私有YamlConfig配置;