我想问一个关于Spring Data的问题 - MongoDB和JUnit测试。Spring数据 - 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]:指定类是一个接口
我现在的问题是,如何做到这一点,UserRepositor y是实例化的,虽然没有实现类,因为Spring Data是通过自己的实现来实现的?如果我不@Repository比Spring标记USerRepository不创建bean对象
[编辑]
我已经试过你贴的链接的例子,如果我跑过来的主要应用,它工作正常- 方法。 然后我试图执行一个测试类,但是在这种情况下,我得到了同样的异常:
错误创建名为“hello.test.TestClass”豆:自动装配依赖注入失败;嵌套异常是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(必需=真)}
我的测试类看起来像这样的src /测试/ JAVA /你好/测试(是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);
}
其实我也不知道我需要为了得到测试运行的注解 - 也许你将有另一个建议,以顺序在我可以解决这个问题。 非常感谢您的帮助!
[编辑 - 已解决]
所以,如果有人需要回答这个问题 - 我有张贴一个完整的答案和工作applikation这个问题Full working Spring Boot, Spring Data, MongoDB Application for download
非常感谢
从UserRepository接口中删除'@ Repository'注释。弹簧数据使用不同的机制来发现Spring Data Repository类型 –