我需要测试我的数据库,当我在有约束的特定列中插入重复值时,它会引发异常。您能告诉我如何模拟第二个相同的呼叫和触发异常吗?
这是我的代码,但是不起作用:
@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)