使用 Mockito 创建 Mock Dao 时得到空响应
Getting null response while creating Mock Dao using Mockito
我正在尝试为 Dao 创建模拟数据 class。测试用例 运行 成功,但返回空数据。我搜索并实施了@Mock、@InjectMocks、Inititated MockitoAnnotation,但它仍然无法正常工作。该项目在 spring。上下文路径也是正确的。我没有使用任何其他方法。首先对于 运行 我试图调用一个方法并打印。请帮我解决这个错误。
区域管理器Class:
@Service("regionManager")
public class RegionManager implements RegionManagerIntf {
@Autowired
RegionDaoIntf regionInquiry;
private RegionDao regionDao;
@Override
public ListPojo retrieveData(String Id, String details, String code) {
return regionInquiry.retrievePData(Id, details, code);
}
public RegionDao getRegionDao() {
return regionDao;
}
public void setRegionDao(RegionDao regionDao) {
this.regionDao = regionDao;
}
}
道Class:
@Component
public class RegionProcessorFactory implements RegionProcessorIntf {
private static final Logger logger = Logger
.getLogger(RegionProcessorFactory.class);
@Override
public ListPojo retrieveData(String Id,
String details, String code) {
ListPojo listPojo = new ListPojo();
//Do some action
return listPojo;
}
}
ListPojo:
It contains getter setters.
测试Class:
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.test.context.ContextConfiguration;
import com.fasterxml.jackson.databind.ObjectMapper;
@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration({"classpath*:spring/beanRefContext.xml"})
public class RegionManagerTest
{
private String Id = "12345";
private String Code = "123";
private String details = "12";
ObjectMapper mapper;
@Mock
private RegionProcessorFactory dao;
@Mock
private ListPojo listPojo;
@InjectMocks
private RegionManager service;
/**
* Before method will be called before executing every test case
*/
@Before
public void initialize() {
System.out.println("In initialize");
MockitoAnnotations.initMocks(this);
dao = mock(RegionProcessorFactory.class);
listPojo = mock(ListPojo.class);
service = new RegionManager();
service.setRegionDao(dao);
}
@Test
public void CreateDatabaseMock() throws Exception
{
System.out.println("dao result :: "+dao.retrieveData(Id, "", ""));
when(dao.retrieveData(Id, "", "")).thenReturn(listPojo);
verify(dao).retrieveData(Id, "", "");
}
/**
* After method will be called after executing every test case
*/
@After
public void TearDownClass() {
}
}
首先:如果您正在使用 @RunWith(MockitoJUnitRunner.class)
,则无需 MockitoAnnotations.initMocks(this);
更多 here
其次:所有带有 @Mock
的东西都将被模拟,mockito 将尝试将其注入到用 @InjectMocks
注释的对象中,mockito 将实例化该对象(在旧的 mockito 版本中,您必须自己创建对象)所以不需要以下几行:
dao = mock(RegionProcessorFactory.class);
listPojo = mock(ListPojo.class);
service = new RegionManager();
service.setRegionDao(dao);
第三:实际执行应该在stubbing之后
@Test
public void CreateDatabaseMock() throws Exception{
when(dao.retrieveData(Id, "", "")).thenReturn(listPojo);
System.out.println("dao result :: "+dao.retrieveData(Id, "", ""));
verify(dao).retrieveData(Id, "", "");
}
我正在尝试为 Dao 创建模拟数据 class。测试用例 运行 成功,但返回空数据。我搜索并实施了@Mock、@InjectMocks、Inititated MockitoAnnotation,但它仍然无法正常工作。该项目在 spring。上下文路径也是正确的。我没有使用任何其他方法。首先对于 运行 我试图调用一个方法并打印。请帮我解决这个错误。
区域管理器Class:
@Service("regionManager")
public class RegionManager implements RegionManagerIntf {
@Autowired
RegionDaoIntf regionInquiry;
private RegionDao regionDao;
@Override
public ListPojo retrieveData(String Id, String details, String code) {
return regionInquiry.retrievePData(Id, details, code);
}
public RegionDao getRegionDao() {
return regionDao;
}
public void setRegionDao(RegionDao regionDao) {
this.regionDao = regionDao;
}
}
道Class:
@Component
public class RegionProcessorFactory implements RegionProcessorIntf {
private static final Logger logger = Logger
.getLogger(RegionProcessorFactory.class);
@Override
public ListPojo retrieveData(String Id,
String details, String code) {
ListPojo listPojo = new ListPojo();
//Do some action
return listPojo;
}
}
ListPojo:
It contains getter setters.
测试Class:
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.test.context.ContextConfiguration;
import com.fasterxml.jackson.databind.ObjectMapper;
@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration({"classpath*:spring/beanRefContext.xml"})
public class RegionManagerTest
{
private String Id = "12345";
private String Code = "123";
private String details = "12";
ObjectMapper mapper;
@Mock
private RegionProcessorFactory dao;
@Mock
private ListPojo listPojo;
@InjectMocks
private RegionManager service;
/**
* Before method will be called before executing every test case
*/
@Before
public void initialize() {
System.out.println("In initialize");
MockitoAnnotations.initMocks(this);
dao = mock(RegionProcessorFactory.class);
listPojo = mock(ListPojo.class);
service = new RegionManager();
service.setRegionDao(dao);
}
@Test
public void CreateDatabaseMock() throws Exception
{
System.out.println("dao result :: "+dao.retrieveData(Id, "", ""));
when(dao.retrieveData(Id, "", "")).thenReturn(listPojo);
verify(dao).retrieveData(Id, "", "");
}
/**
* After method will be called after executing every test case
*/
@After
public void TearDownClass() {
}
}
首先:如果您正在使用 @RunWith(MockitoJUnitRunner.class)
,则无需 MockitoAnnotations.initMocks(this);
更多 here
其次:所有带有 @Mock
的东西都将被模拟,mockito 将尝试将其注入到用 @InjectMocks
注释的对象中,mockito 将实例化该对象(在旧的 mockito 版本中,您必须自己创建对象)所以不需要以下几行:
dao = mock(RegionProcessorFactory.class);
listPojo = mock(ListPojo.class);
service = new RegionManager();
service.setRegionDao(dao);
第三:实际执行应该在stubbing之后
@Test
public void CreateDatabaseMock() throws Exception{
when(dao.retrieveData(Id, "", "")).thenReturn(listPojo);
System.out.println("dao result :: "+dao.retrieveData(Id, "", ""));
verify(dao).retrieveData(Id, "", "");
}