2012-07-16 4 views
0

그래서 단위 테스트 중에 내 데이터 레이어 객체를 조롱하기 위해 easymock을 사용했습니다. 난 지속성을 위해 JPA를 사용하고 있습니다. 예 : 프로젝트 프로젝트 = EasyMock.cre .. (Project.class);junit 및 easymock으로 조롱 된 객체 유지하기

이제 테스트하고 싶은 메소드는이 프로젝트가 몇 가지 작업을 수행 한 다음 persist (project)를 호출하여 지속합니다. 프로젝트가 조롱 된 객체이므로 여기에 오류가 발생합니다. 제 매니저는 메소드의 기능을 테스트하기를 원하기 때문에 제게 말하고 있습니다. db로부터의 반환 값은 진짜 db 대신에 조롱을 사용해야하는 이유는 아닙니다. 따라서 메소드 호출이 지속되는이 메소드의 경우 어떻게해야합니까?

감사합니다.

+1

는 테스트하려는 작업에 따라 달라집니다 :

그래서 코드는 같을 것이다. – esej

+0

나는 그것이 지속되었는지 여부를 테스트하고 싶지 않습니다. 단지 그 메소드가 제대로 호출되는지 테스트 해보고 싶다고 생각해보십시오. – Sara

답변

4

엔티티 관리자가 아닌 엔티티 관리자를 조롱해야합니다.

엔티티는 쉽게 만들 수있는 pojo 일 뿐이며 엔티티 관리자에서 persist가 호출되는지 확인해야합니다. 정적 방법으로 클래스에서 테스트 엔티티 관리자의 인스턴스를 생성하는 것 같습니다

Edit

. 그것을 조롱하는 쉬운 방법이 없습니다.

dependency injection을 사용하는 개체에 Entity 관리자를 전달해야합니다. 그런 다음 실제 구현을 전달하는 대신 모의 인스턴스를 전달하면됩니다.

Project project = ...  

EntityManager manager = EasyMock.createStrictMock(EntityManager.class); 
ClassUnderTest test = new ClassUnderTest(manager) 

//You expect this to be called  
manager.persist(project); 

EasyMock.replay(manager); 

//The method you are testing 
test.save(project); 

EasyMock.verify(manager); 

(방법이 꽤 괜찮되지 않을 수도 있습니다, 그래서 나는 잠시 동안 EasyMock에를 사용하지 않았습니다.)

+0

감사합니다. 이것이 내가 필요한 것이라고 생각합니다. 그래서 내 엔티티 관리자는 현재 다음과 같은 것을 가지고 있습니다 : EntityManager entityManager = Persistence.createEntityManagerFactory ("AutomationCreatePU"). createEntityManager(); 엔티티 관리자를 어떻게 조롱 할 수 있는지 좀 더 설명해 주시겠습니까? 아니면 어떤 링크? 감사. – Sara

+1

@Sara - 모의 프로젝트를 만들고 테스트중인 클래스에 전달하는 것과 같은 방법을 사용하십시오. –

+0

탁자. 나는 그것을 시도하고 다시 당신에게 돌아갈거야. :) – Sara

관련 문제