首页 > 解决方案 > 如何在 Spring Boot 中模拟 Optional bean?

问题描述

在我的SpringBootApplication中,我有一个bean注入另一个可选 bean(如下所示)

@Service
public class A {

    //B is another @Component from one of the dependencies
    private Optional<B> b;
    ...
    ...
}

我正在为class A需要的地方编写集成测试@MockBean Optional<B> b。然而,由于Optional是最后一堂课,spring mockito 会引发以下错误

无法模拟/监视类 java.util.Optional - 最终类

有没有解决的办法?任何帮助深表感谢。

标签: javaspringspring-bootmockitospringmockito

解决方案


您可以使用Optional.of(b).

如果您将 mockito 与注释一起使用,则不能使用@InjectMocks,因为您的 optional 不会因 mockito 而闻名。您必须自己创建服务A。像这样的东西:

@RunWith(MockitoJUnitRunner.class)
public class ATest {
    @Mock
    private B b;

    private A a;

    @Before
    public void setup() {
        a = new A(Optional.of(b));
    }
}

推荐阅读