我想使用一个mock DAO来对我的spring应用程序中的服务层进行单元测试。在DAO中,seesinoFactory是使用@Inject注入的。
当测试类配置为@RunWith(MockitoJUnitRunner.class)时
@RunWith(MockitoJUnitRunner.class)
public class ServiceTest {
@Mock
private MyDao myDaoMock;
@InjectMocks
private MyServiceImpl myService;
}
输出与预期一样。
当我将配置更改为使用@RunWith(SpringJUnit4ClassRunner.class)时
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/ServiceTest-context.xml")
public class ServiceTest {
@Mock
private MyDao myDaoMock;
@InjectMocks
private MyServiceImpl myService;
@Before
public void setup(){
MockitoAnnotations.initMocks(this);
}
}
如果SessionFactory bean在ServiceTest-context.xml中不可用,则将抛出异常"未找到符合依赖关系的类型为[org.hibernate.SessionFactory]的bean"。
我不明白的是,MyDao已经用@Mock注释了,为什么还需要sessionFactory?
您必须使用@RunWith(MockitoJUnitRunner.class)
来初始化这些mock并注入它们。
@Mock
创建一个mock@InjectMocks
创建类的一个实例,并将使用@Mock
或@Spy
注释创建的mock注入到该实例中
或者使用Mockito.initMocks(this)
如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("test-app-ctx.xml")
public class FooTest {
@Autowired
@InjectMocks
TestTarget sut;
@Mock
Foo mockFoo;
@Before
/* Initialized mocks */
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void someTest() {
// ....
}
}