【发布时间】:2015-06-17 16:58:21
【问题描述】:
我有一个关于 Spring Data - MongoDB 和 JUnit 测试的问题。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = { UserRepository.class, User.class })
public class MyJUnitTest {
UserRepository 如下所示:
@Repository
public interface UserRepository extends MongoRepository<User, String> {
User findByUsername(final String username);
}
我得到以下异常:
无法实例化 [... .repository.UserRepository]:指定的类是一个接口
我现在的问题是,如何做到这一点,尽管没有实现类,但 UserRepository 是实例化的,因为 Spring Data 自己执行实现?如果我不使用 @Repository 标记 USerRepository ,则 Spring 不会创建 bean 对象
[编辑]
我已经尝试过您发布的链接示例,如果我通过 main- 方法运行应用程序,它可以正常工作。 然后我尝试实现一个测试类,但在这种情况下我得到了同样的异常:
创建名为“hello.test.TestClass”的 bean 时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 hello.CustomerRepository hello.test.TestClass.repository;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type of [hello.CustomerRepository] found for dependency: 预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true)}
我的测试类在 src/test/java/hello/test 中看起来像这样(hello.test 是包):
@ComponentScan("hello")
@EnableMongoRepositories(basePackages = "hello")
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = { CustomerRepository.class, Customer.class })
public class TestClass {
@Autowired
private CustomerRepository repository;
@Test
public void testMethod() {
System.out.println("repositoryd: " + repository);
}
}
我的 CustomerRepository 看起来像这样(带有@Configuration 注释):
@Configuration
public interface CustomerRepository extends MongoRepository<Customer, String> {
public Customer findByFirstName(String firstName);
public List<Customer> findByLastName(String lastName);
}
实际上我不知道我需要哪些注释才能使测试运行 - 也许您会有其他建议以便我可以解决这个问题。
【问题讨论】:
-
从
UserRepository接口中移除@Repository注解。 Spring Data 使用不同的机制来发现 Spring Data Repository 类型 -
博客条目的链接已失效...
标签: spring junit spring-data spring-data-mongodb