我正在使用Mockito @Mock
和@InjectMocks
注释将依赖项注入到使用Spring注释的私有字段中@Autowired
:
@RunWith(MockitoJUnitRunner.class) public class DemoTest { @Mock private SomeService service; @InjectMocks private Demo demo; /* ... */ }
和
public class Demo { @Autowired private SomeService service; /* ... */ }
现在我想将真实对象注入私有@Autowired
字段(没有setter).这是可能的还是机制仅限于注射Mocks?
使用@Spy
注释
@RunWith(MockitoJUnitRunner.class) public class DemoTest { @Spy private SomeService service = new RealServiceImpl(); @InjectMocks private Demo demo; /* ... */ }
Mockito会将所有具有@Mock
或@Spy
注释的字段视为注入注释的实例中的潜在候选项@InjectMocks
.在上面的例子中,'RealServiceImpl'
实例将被注入'demo'
有关详细信息,请参阅
的Mockito回家
@间谍
@嘲笑
除了@Dev Blanked的答案,如果你想使用Spring创建的现有bean,代码可以修改为:
@RunWith(MockitoJUnitRunner.class) public class DemoTest { @Inject private ApplicationContext ctx; @Spy private SomeService service; @InjectMocks private Demo demo; @Before public void setUp(){ service = ctx.getBean(SomeService.class); } /* ... */ }
这样您就不需要更改代码(添加另一个构造函数)来使测试工作.