에 EntityManager를 주입, 나는 ThoughtWorks의 XStream을 라이브러리에서 예외가 JPA. 동일한 테스트는 PowerMockRule
을 사용하지 않을 때 잘 작동합니다. 또한 테스트 시작시 PowerMockLoader의 모든 패키지를 무시합니다. 내가 @PowerMockIgnore
에 대한 다양한 값을 시도했는데, 이는 보통 PowerMock에서 발생하는 문제를 해결하지만, 모든 패키지를 절대 무시하더라도이 오류는 여전히 발생합니다. 다음과 같이 Powermock 봄 원인 ConversionException 테스트
@PowerMockIgnore("*")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/test-configuration.xml")
public class SpringAndPowerMockTest {
@Rule
public PowerMockRule rule = new PowerMockRule();
@PersistenceContext
private EntityManager manager;
@Test
public void test() {
}
}
는 예외입니다 - 역 추적을 페이스트 빈에 전체 역 추적에 대한 링크가 질문의 길이에 대한 제한) 초과 :
관련 지속성 단위 :
<persistence-unit name="inMemory">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.connection.driver_class" value="org.h2.Driver" />
<property name="hibernate.connection.url" value="jdbc:h2:mem:InMemoryUnitTests;MODE=MySQL;DB_CLOSE_ON_EXIT=FALSE" />
<property name="hibernate.connection.username" value="sa" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
</properties>
</persistence-unit>
을
종속성 :
<dependencies>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-easymock</artifactId>
<version>1.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4-rule</artifactId>
<version>1.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-classloading-xstream</artifactId>
<version>1.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
스프링을 사용하여 테스트 3.2.3.RELEASE
. 또한 스프링 테스트 버전 3.0.5.RELEASE
으로 테스트했는데 실제로 스프링/Powermock 조합으로 다른 오류가 해결되지만 실제로는 그렇지 않습니다.
사용하는 XStream을 어떤 버전? 사용자 정의 XStream 변환기가 등록되어 있습니까? 사용자 정의 XStream 변환기가있는 곳에서 문제가 발생했습니다. 사용자 정의 변환기는 다른 변환기보다 먼저 호출되지만, XStream에서 제공 한 MapConverter의 서브 클래스를 작성한 이후로 canConvert 메소드가 널 안전하지 않은 경우 널 포인터 예외 (일반적으로 NullConverter가 목록 맨 위에 있음)가 발생했습니다. 해결 방법은 사용자 지정 변환기의 canConvert 메서드를 null 값으로 설정하는 것입니다. 그러나 당신의 스택 트레이스로부터 판단 해 보면, 이것은 다른 것으로 보입니다 ... –
xstream 버전은'powermock-classloading-xstream' 의존성을 통해 1.4.2로 전환됩니다. 표시된 테스트를 제외하고는 다른 코드가 없으므로 사용자 지정 변환기가 없습니다. – amoe
Powermock 1.5에 대한 제 경험으로는 Xstream 1.4.2와 호환되지 않습니다. 원인을 추적하십시오. 그 이상한 것은 powermock-classloading-xstream이 해결하는 것입니다. 나는 당신의 pom에 직접 의존성으로서 XStream 1.2.2를 추가하는 것을 제안한다. –