spring-test-dbunit 找不到@Test 注解
spring-test-dbunit can't find @Test annotation
我已经设置了 spring-test-dbunit 但出现以下异常:
testSometing(com.my.package.dbunit.DbUnit) Time elapsed: 13.013 s <<<
ERROR! java.lang.NoSuchMethodError:
org.springframework.core.annotation.AnnotationUtils.findAnnotation(Ljava/lang/reflect/AnnotatedElement;Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
测试 class 如下所示:
package com.my.package.dbunit;
import com.github.springtestdbunit.DbUnitTestExecutionListener;
import com.github.springtestdbunit.annotation.DatabaseSetup;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/test-application.xml")
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, DbUnitTestExecutionListener.class, DbUnitTestExecutionListener.class})
public class DbUnit {
@Autowired
public MyDAO myDAO;
@Test
@DatabaseSetup("target/partial.xml")
public void testSometing() throws Exception {
int rootId = 123;
MyClass root = myDAO.getById(rootId);
}
}
测试-application.xml 如下所示:
...
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
...
pom.xml 看起来像这样
...
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.springtestdbunit</groupId>
<artifactId>spring-test-dbunit</artifactId>
<version>1.3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
...
好像是因为@Test
注解无法解析,所以错误存在。不知道为什么
您的 spring-test-dbunit
版本很可能与您的 spring-version 不兼容。 spring-test-dbunit
版本 1.3.0(似乎是最新版本)依赖于 Spring 4.2.5。您可能在项目中使用更新的 Spring 版本,该版本在 AnnotationUtils
中不再有 findAnnotation
方法。
您现在基本上可以做两件事:
- 使用Spring 4(将来可能会出现问题,当支持被取消时)
- 找到
spring-test-dbunit
的替代方案
我已经设置了 spring-test-dbunit 但出现以下异常:
testSometing(com.my.package.dbunit.DbUnit) Time elapsed: 13.013 s <<< ERROR! java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.findAnnotation(Ljava/lang/reflect/AnnotatedElement;Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
测试 class 如下所示:
package com.my.package.dbunit;
import com.github.springtestdbunit.DbUnitTestExecutionListener;
import com.github.springtestdbunit.annotation.DatabaseSetup;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/test-application.xml")
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, DbUnitTestExecutionListener.class, DbUnitTestExecutionListener.class})
public class DbUnit {
@Autowired
public MyDAO myDAO;
@Test
@DatabaseSetup("target/partial.xml")
public void testSometing() throws Exception {
int rootId = 123;
MyClass root = myDAO.getById(rootId);
}
}
测试-application.xml 如下所示:
...
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
...
pom.xml 看起来像这样
...
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.springtestdbunit</groupId>
<artifactId>spring-test-dbunit</artifactId>
<version>1.3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
...
好像是因为@Test
注解无法解析,所以错误存在。不知道为什么
您的 spring-test-dbunit
版本很可能与您的 spring-version 不兼容。 spring-test-dbunit
版本 1.3.0(似乎是最新版本)依赖于 Spring 4.2.5。您可能在项目中使用更新的 Spring 版本,该版本在 AnnotationUtils
中不再有 findAnnotation
方法。
您现在基本上可以做两件事:
- 使用Spring 4(将来可能会出现问题,当支持被取消时)
- 找到
spring-test-dbunit
的替代方案