有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

REST+DAO对象的java Mockito

这是我的端到端测试模拟代码:

@RunWith(MockitoJUnitRunner.class)
public class testRest extends Jersey Test{
DAOFactory mockDAOfactory;
RPRestrictionReasonDAO fakeDao;

@Before
public void init() {
    mockDAOfactory = mock(DAOFactory.class);
    fakeDao = mock(RPRestrictionReasonDAO.class);
}
@Test
public void testServiceWorks() throws Exception {
//Assuming I hav already initialized restrictReasons with a dummy value
when(fakeDao.findAll()).thenReturn(restrictReasons);
when(mockDAOfactory.getRPRestrictionReasonDAO()).thenReturn(fakeDao);
String response = client().resource("http://localhost:9998/")
            .path("EmployerDetails/PossibleRestrictions")
            .get(String.class);
    System.out.println("Response is " + response.toString());
}
}

每当我这样做的时候,我总是在数据库中得到实际的结果,而不是限制性的原因。我尝试了所有的博客,但似乎没有任何帮助。我该怎么办?让我知道我是否需要发布更多代码

注意:我在使用Grizzly容器扩展Jersey测试时实现了这些方法


共 (1) 个答案

  1. # 1 楼答案

    从代码中我可以看出,您正在创建模拟,但实际上并没有在客户机/服务器实现中使用模拟

    为了使模拟能够工作,它需要由底层实现使用,而不仅仅是在测试类中创建。在这种情况下,假设您的测试与您测试的服务器运行在同一个JVM中,您需要将创建的模拟注入依赖它们的类中

    @inkalimeva给出的另一个答案是,通过将模拟注入DAO工厂,试图为您解决这个问题。通过将DAOFactory声明更改为使用的具体类,而不是抽象类,您可能能够修复在该答案中遇到的错误

    例如

    @InjectMocks
    DAOFactoryImpl mockFactory;
    

    假设DAOFactoryImpl是您的具体工厂类