0
EntityManager를 조롱하는 데 문제가 있습니다. 모든 것이 컴파일되고 테스트는 실행되지만 mocked 메서드는 null을 반환합니다.jmockit의 Mockups API를 사용하여 EntityManager를 조롱하는 방법은 무엇입니까?
내가 조롱 된 '찾기'메소드 내에 중단 점을 설정할 때 앱이 절대로 중지되지 않습니다. 저는 정적 방법으로 다른 클래스를 성공적으로 모방 할 수있었습니다. 그러나이 클래스를 사용하면 문제가 있습니다.
Java 1.8.0과 함께 Jmockit 1.7을 사용합니다. 모의하려고하는 클래스는 다음과 같습니다. javax.persistence.EntityManager
더 많은 정보가 필요하면 질문하십시오. 어떤 도움을 주셔서 고맙게 생각합니다.
여기 내 코드입니다 : 버전 1.8 이상에
@RunWith(JMockit.class)
public class ShapefileSerializerTest {
@Mocked
private EntityManager em;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
new MockDatabase();
}
@Test
public void testPrepareShapefile() {
String[][] data = new String[][] {{"1", "100"}, {"1", "101"}, {"1", "102"}, {"1", "103"}, {"2", "200"}, {"2", "201"}};
List<Map<String, String>> featuresData = Stream.of(data).map(row -> {
Map<String, String> map = new HashMap<>(2);
map.put("layerId", row[0]);
map.put("id", row[1]);
return map;
}).collect(Collectors.toList());
ShapefileSerializer shapefileSerializer = new ShapefileSerializer("shapefiles");
// if I do not set up the em here - then it will be null inside the tested class
Deencapsulation.setField(shapefileSerializer, em);
Response response = shapefileSerializer.prepareShapefile(featuresData);
assertEquals(Status.OK.getStatusCode(), response.getStatus());
}
public static final class MockDatabase extends MockUp<EntityManager> {
@Mock
@SuppressWarnings("unchecked")
public <T> T find(Class<T> entityClass, Object primaryKey) {
return (T) new ProjectLayer();
}
}
}
감사합니다. 불행히도 이것은 효과가 없었습니다. 예상 차단에서 다음과 같은 예외가 발생합니다. IllegalArgumentException : 형식 설명자가 잘못되었습니다. (Ljava/lang/Class ; Ljava/lang/Object;) java/lang/Object; 이 줄은 오류를 발생시킵니다. result = new ProjectLayer(); 나는 이것을 시험해보고 동일한 예외를 얻었다. –
@MarcinRoguski 버전 1.7의 버그로 1.8으로 수정되었습니다. 따라서 JMockit을 버전 1.8 이상으로 업그레이드해야합니다. –
@ Rogério 감사합니다. Expectations와 관련된 문제를 해결했습니다 :) 그러나 EntityManager를 모의하는 것이 왜 효과가 없었는지 아직 모르겠습니다. 나는 또한 다른 클래스와 그것을 시도하고 여전히 동일합니다. 조롱 된 메서드가 호출되지 않습니다. 심지어 인스턴스화되어 다음을 사용하여 테스트 된 클래스로 전달 되었음에도 불구하고 : Deencapsulation.setField (shapefileSerializer, em); –