2017-09-26 6 views
0

쓸 수 있습니다 나는 다음과 같은 코드를 가지고 테스트에서어떻게 단위 지속에 대한 테스트 및 세척 예외

try { 
    em.persist(myObject); 
    em.flush(); 
} 
catch (Exception e) { 
    System.out.println("An Exception occur when trying to persist and flush"); 
} 

내가 Mockito 내 EntityManager의 모의 있습니다

@Mock 
EntityManager mockEm; 

하지만 지속 및 세척과 같다을 void 메소드를 사용하여 다음과 같이 쓸 수는 없습니다 :

단위 테스트 (예 : JUnit 사용)를 mo ck em.persist와 em.flush를 사용하여 예외없이 두 경우를 테스트 할 수 있습니까? 감사합니다. .

+0

이 답변에는 간단히 답변 할 수 없습니다. 정확히 무엇을 테스트하고 싶습니까? ** persist()/flush() 내부에서 ** 어떤 일이 발생합니까? 아니면이 두 메서드가'em' 객체에서 호출되는지 확인하는 데 관심이 있습니까? – GhostCat

+0

persist 또는 flush가 EntityExistException 또는 PersistenceException과 같은 예외를 반환 할 때 테스트하려고합니다. 이 경우 내 코드가 Exception을 catch하고 해당 코드가 실제로 해당 코드를 catch하고 실행하는지 테스트하려고합니다. –

+0

그러면 em 객체를 모의 해보고이 메소드를 호출 할 때 예외를 던지기를 원할 것입니다. – GhostCat

답변

0

더 자세한 정보가 필요합니다. 지금 당장 당신은 다음과 같은 것을 할 수 있습니다 : 그것은 일종의 의사 코드입니다.

@Test // it passess when there's one object in repository (I assume u have clean memory db) 
public void shouldPersistMyObject() throws Exception { 
    em.persist(myObject); 
    em.flush(); 
    Assert.assertThat(dao.findAll(), Matchers.equalTo(1)); 
} 

@Test(expected = <YourDesiredException>.class) // if <YourDesiredException> is thrown, your test passes 
public void shouldThrowExceptionWhenSavingCorruptedData() { 
    //set NULL on some @NotNull value, then save, like: 
    myObject.setUserId(null); 
    em.save(myObject); //exception is thrown 
} 
+0

일반적으로 다음과 같이 테스트를 작성했습니다. '@Mock EntityManager mockEm; @Test 공개 무효 myTest() { –

+0

죄송합니다. 다시 시도 : 보통 내 테스트를 작성했습니다. '@Mock EntityManager mockEm; @Mock 쿼리 mockQuery; @InjectMocks MyClassToTest myClassToTest; (mockEm.createNamedQuery ("MyObject.findById")) .thenReturn (mockQuery); (mockQuery.setParameter (MyClassToTest.PARAM_ID, EXISTING_ID)) .thenReturn (mockQuery); @Test public void testFindById() 예외를 throw합니다. { when (mockQuery.getSingleResult()). then return (existingObject); MyObject result = myClassToTest.findById (mockEmf, EXISTING_ID); assertEquals (existingObject, result); }' –

+0

이러한 정보를 주석에 넣지 마십시오. 대신 질문을 업데이트하십시오. 아니면 그냥 거기에 올려 놓은 것을 읽을 수 있습니까? – GhostCat