java - 用于 REST + DAO 对象的 Mockito

标签 java rest junit 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());
}
}

每当我这样做时,我总是在我的数据库中得到实际结果,而不是 restrictReasons。我尝试了所有博客,但似乎无济于事。我如何解决这个问题?让我知道是否需要发布更多代码。

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

最佳答案

据我从您的代码中可以看出,您正在创建模拟,但实际上并未在您的客户端/服务器实现中使用模拟。

要让 mock 起作用,它需要由底层实现使用,而不仅仅是在您的测试类中创建。在这种情况下,假设您的测试与您正在测试的服务器在同一 JVM 中运行,您需要将创建的模拟注入(inject)到依赖它们的类中。

@inkalimeva 的另一个回答是试图通过将模拟注入(inject)您的 DAO 工厂来为您解决这个问题。您可以通过将 DAOFactory 声明更改为使用的具体类而不是抽象类来修复您遇到的错误。

例如

@InjectMocks
DAOFactoryImpl mockFactory;

假设 DAOFactoryImpl 是您的具体工厂类。

关于java - 用于 REST + DAO 对象的 Mockito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24874424/

相关文章:

java - 如何编写 Java 目录选择器?

java - Junit - 测试对 obj.wait() 的调用

java - 如何启用按钮将变量加一并将其显示在文本字段上

java - JUnit 测试用例的最大覆盖率

java - Spring @TestPropertySource 类路径与文件

java - 使用 java POJO 和 jackson 进行 Rest api 测试

python - Django 中的资源 View

javascript - 如何否定 ablFilter 中正在使用的过滤器

java - 如何使用参数化运行 JUnit SpringJUnit4ClassRunner?

java - EasyMock:如何在集合顺序无关紧要的情况下验证值集合的方法顺序