基本问题: 在测试中使用
@Mock
和 @InjectMocks
时,您必须对仍想正常注入的所有 Bean 使用 @Spy
。问题是这不适用于 @Property
,您不能在 @Spy
上使用 @Property
。但是当没有 @Spy
时,“envValue”的属性值为 null。那该怎么办?
@MicronautTest
@Property(name = "someEnvName", value = "0")
public class TestFooBar {
@Spy
@Inject
private Foo foo; //bean that is injected inside Bar
@Mock
private ClassToBeMocked mocked; //bean that is injected inside Bar
@Spy
@Property(name = "someEnvName")
private Long envValue; //some property that is used in Bar. --> throws an error
@InjectMocks
private Bar bar; //class to test
好的。解决方案就像 micronaut 文档中建议的那样 (https://micronaut-projects.github.io/micronaut-test/4.0.0-M8/guide/index.html#junit5) 而不是在所有“正常”实现上使用
@Spy
。我只是不得不使用
@MockBean(ClassToBeMockedImpl.class)
public ClassToBeMocked classToBeMocked() {
return mock(ClassToBeMocked.class);
}
在课堂上我想要模拟。所以所有的现场注入都是不必要的。