Mockito:注入真正的对象到私人@Autowired领域

我正在使用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”

欲知更多详情,请参阅

http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#13 http://docs.mockito.googlecode.com/hg/latest/org/mockito/Spy.html

除了@Dev空白的答案,如果你想使用由Spring创build的现有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); } /* ... */ } 

这样,你不需要改变你的代码(添加另一个构造函数),只是为了使testing工作。