我有一个BlogPostRepository
,它是JpaRepository接口:
@Repository
@Primary
public interface BlogPostRepository extends JpaRepository<BlogPost, Long> {
@Query("SELECT p FROM BlogPost p WHERE slug = ?1")
List<BlogPost> findBySlug(String slug);
}
根据以下错误,当我运行以下测试时,Spring无法加载BlogPostRepository:
Parameter 0 of constructor in com.example.demo.Services.BlogService required a bean of type 'com.example.demo.Repositories.BlogPostRepository' that could not be found.
我的测试如下:
@RunWith(SpringRunner.class)
@WebMvcTest(BlogController.class)
@ContextConfiguration(classes = {DemoApplication.class,BlogController.class})
public class BlogControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void test() throws Exception
{
MvcResult result = this.mockMvc.perform(get("/blog"))
//.andDo(print())
.andExpect(status().isOk())
.andReturn();
assertTrue(result.getResponse().getContentAsString().contains("Hello world"));
}
}
问题是我无法将BlogPostRepository定义为bean,因为它是一个接口:
@Bean
public ExceptionFactory exceptionFactory()
{
return new BlogPostRepository(); //this does not work! -> cannot construct interface
}
这仅在集成测试期间发生。