我有一个关于 Spring Data - MongoDB 和 JUnit 测试的问题。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = { UserRepository.class, User.class })
public class MyJUnitTest {
用户存储库如下所示:
@Repository
public interface UserRepository extends MongoRepository<User, String> {
User findByUsername(final String username);
}
我收到以下异常:
无法实例化 [....repository.UserRepository]:指定的类是一个接口
我现在的问题是,如何做到这一点,尽管没有实现类,但 UserRepository 是实例化的,因为 Spring Data 自己实现了?如果我不使用 @Repository 标记 USerRepository,Spring 不会创建 bean 对象
[EDIT]
我已经尝试过您发布的链接示例,如果我通过 main- 方法运行应用程序,它可以正常工作。
然后我尝试实现一个测试类,但在这种情况下我得到了相同的异常:
创建名称为“hello.test.TestClass”的 bean 时出错:自动装配依赖项注入失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException: 无法自动装配字段: private hello.CustomerRepository hello.test.TestClass.repository;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到依赖项 [hello.CustomerRepository] 类型的合格 bean:预计至少有 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);
}
实际上,我不知道需要哪些注释才能运行测试 - 也许您会有另一个建议,以便我可以解决这个问题。