我是一名Mockito新手。我正在尝试通过模拟数据库交互来为服务编写JUnit测试:
我有以下类(仅代表实际类)
public class TestService{
public Response getTestList(String type){
list = getListbyType(type);
return response.entity(list);
}
private List getListbyType(String type){
...
..
TestDAO testdao = new Testdao(sqlconn);
list = testdao.getListfromDB(type)
return list;
}
}
我的测试类大概是这样的:
public class TestServiceTest{
@InjectMocks
private TestService testService = new TestService();
@Test
public void getTestListTest(){
List testlist = new List();
tetslist.add("test1");
TestDAO testdaomock = mock(TestDAO);
when(testdaomock.getListfromDB("test")).thenreturn(list);
list = testService.getTestList(test);
}
}
但是当我运行这个测试时,它仍然会调用实际的数据库查询,并从数据库中检索值,而不是模拟的值,我应该模拟SQL连接和非默认构造函数吗?我一点头绪都没有。
-- 更新
正如其他人建议的那样,我将DAO实例化移到了我的服务构造函数中,并且使用了Spy,但是仍然调用了实际的DB查询,而不是模拟查询。
testdaomock.getListfromDB("test")
不应该编译通过,因为private List getListbyType(String type)
是私有的。它是如何编译通过的呢? - user3458@RunWith(MockitoJUnitRunner.class)
- WildDev