我需要测试我的数据库,当我在有约束的特定列中插入重复值时,它会引发异常。您能告诉我如何模拟第二个相同的呼叫和触发异常吗?

这是我的代码,但是不起作用:

@RunWith(MockitoJUnitRunner.class)
public class SomeTestClass {

    @InjectMocks
    private FooService service = new FooServiceImpl();

    @Test(expected = DataIntegrityViolationException.class)
    public void myTest() {
       // init Foo object here

       service.createFoo(myFoo); // here should pass

       service.createFoo(myFoo); // here shouldn't
    }
}


我无法显示原始的FooServiceImpl,但基本概念在这里:

@Transactional
public void createFoo(Foo foo) {
   MainFoo mainFoo = new MainFoo();

   SomeObj obj1 = objService.findOne(foo.getId());

   mainFoo.setObj(obj1);

   fooRepository.save(mainFoo);
}


我做错了什么?谢谢。

最佳答案

我不确定是要测试实际的数据库还是只需要模拟数据库调用,以防您只想测试服务类来更好地模拟第二条语句。

doThrow(ExpectedException).when(mockedObject).methodReturningVoid(...);


另外,如果您正在使用spring,那么您要做的就是使用@InjectMocks并使用@Mock模拟受尊重类的依赖关系。

对于连续通话,您可以使用:

Mockito.when(repo.findOne(Matchers.anyString())).thenReturn(yourObject).thenThrow(EXCEPTION_OBJ)

10-06 07:25