2017-12-10 1 views
0

저는 Spring을 처음 사용합니다. 내 GCGood 클래스는 CrudRepository와 함께 MySQL-DB에 저장됩니다. 그리고 그것은 잘 작동합니다.CrudRepository를 올바른 방법으로 조롱하는 방법?

이제 JUnit-Test를 작성하려고합니다. 물론 필자의 데이터베이스에는 테스트 데이터가 필요하지 않습니다. 그래서 난 내 테스트 썼다 :

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class GCGoodTests { 

    @MockBean 
    private GCGoodRepository goodRepository; 

    @Test 
    public void getterSetterTest() 
    { 
     GCGood testDummy = new GCGod(); 
     testDummy.setAttribute("Muhaha"); 
     testDummy.setColor(Color.BLACK); 
     testDummy.setName("Maka"); 
     testDummy = goodRepository.save(testDummy); 
     Iterable<GCGood> testDummy2 = goodRepository.findAll(); 
     assertEquals(testDummy.getAttribute(), "Muhaha"); 
     assertEquals(testDummy.getColor(), Color.BLACK); 
     assertEquals(testDummy.getName(), "Maka"); 
     assertNotNull(testDummy.getId()); 
     assert(testDummy.getId()>0); 
     assertNotNull(testDummy2); 
    } 
} 

Unfortuantelly "testDummy = goodRepository.save (testDummy)"및 "의 Iterable testDummy2 = goodRepository.findAll();는"null을 반환하고, 테스트가 완료 해달라고.

@MockBean을 @Autowire로 변경하면 모든 것이 정상적으로 작동합니다. 그러나 나는 불필요한 데이터를 가지고있다. 데이터베이스에 shmodda가있다.

그렇다면 데이터 shmodda없이 corret 테스트를 수행하려면 어떻게해야합니까?

답변

1

통합 테스트를 수행하려는 것 같습니다. 그렇다면annotation을 사용하여 메모리 데이터베이스를 사용하여 테스트를 실행할 수있는 환경을 만들어야합니다. 자세한 내용은 documentation에서 확인할 수 있습니다.

테스트하려는 항목에 따라 다릅니다. 리포지토리 (GCGoodRepository)가 테스트 대상인 경우 @Autowired을 사용해야하며 위에서 언급 한 격리 된 환경에서 테스트하려면 메모리 데이터베이스에서 일부를 사용해야합니다. 일부 저장소 (예 : GCGoodRepository)에 의존하는 일부 서비스를 테스트하는 경우이 저장소를 언급 된 @karthi로 조롱해야합니다.

+0

감사합니다! "메모리 데이터베이스에서"문제가 문제였습니다. @DataJpaTest로 잘 작동합니다! – Tagamoga

1

비록 당신이 조롱 된 콩을 주입 했더라도 조롱 받아야 할 방법과 조롱 된 콩에서 어떤 방법을 호출하면 기대했던 것을 언급하지는 못했습니다. 당신이 할 수있는 것은 바로이 같은 @Before 방법 쓰기 :.

@Before 
public void setup() { 
     List<GCGood> gcgoods = Collections.emptyList(); 
     given(goodRepository.findAll()).willAnswer(gcgoods); 
} 

주어진()와 willAnswer는()는 수입 정적 org.mockito.BDDMockito을 통해 가져올 수 있습니다 BDDMockito,에를 *;

+0

도움 주셔서 대단히 감사합니다. 하지만 특수 기능 만 조롱하고 싶지는 않지만 lucascode가 제안한대로 DB를 "메모리에"전송하십시오! – Tagamoga

관련 문제