2

在我的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 - 最终类

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

4

3 回答 3

3

您可以使用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));
    }
}
于 2020-02-25T18:49:34.443 回答
0

@MockBean您实际上应该使用or @MockBeansorTestConfig类来模拟实际的 bean ,并使用模拟的Optionalbean自动装配

@Autowired
private Optional<B> OptionalB;

@MockBean
private B b;
于 2020-02-25T19:04:07.233 回答
0

尽管Lino 的 上述答案完美运行,但我选择不修改生产代码以使测试正常工作。相反,我修改了我的代码,如下所示:

@Service
public class A {

    @Autowired(required = false)
    private B b;
    ...
    ...
}
于 2020-02-26T15:15:09.833 回答