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工作。