WebMvcTest,从测试中排除Repository接口

问题描述 投票:0回答:1

设置

在我的 Spring Boot 2.7 应用程序中,我使用 ViewControllerRegistry 注册了一个简单的 ViewController,因此起始页没有专用的控制器:

@Override
    public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("home");    
    }

在我的测试类中,我尝试过滤掉一些扩展 CrudRepository 的 Spring data JPA 存储库接口:

    @WebMvcTest(  
excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,  
classes = CrudRepository.class)})  

    class HomeControllerTest {
        
        @Autowired
        private MockMvc mockMvc;
    
        @Test
        public void testHomePage() throws Exception {
        mockMvc.perform(get("/"))
        .andExpect(status().isOk());
        }
    }

我无法启动

@WebMvcTest
所需的上下文,因为我在其他测试中使用这些 JPA 存储库接口并且它们被选取。 它们目前看起来都是这样的:

public interface EntityNameRepository extends CrudRepository<EntityName, Long> 

发生了

ApplicationContext 无法加载,测试因此失败。

尝试过这个

我可以使用

@MockBean
添加存储库并忽略它们,从而使测试通过,但我希望在运行此测试时根本不将它们加载到 ApplicationContext 中。

这就是我尝试使用排除过滤器实现的目标。但无论我是否添加确切的存储库名称或任何存储库名称,仍然会选择加载。

问题

当我运行 WebMvc 测试时,我可以选择哪些选项来忽略存储库以及未来的类?我认为这应该可以使用排除过滤器来实现,但似乎我错过了一些东西。

我已经四处搜索并查看了文档,但似乎如何正确设置排除过滤器的详细信息让我无法理解。欢迎大家在这里指点。

spring-boot spring-mvc spring-data-jpa spring-test
1个回答
0
投票

在找到一些对选项的正确描述(Baeldung)后,我偶然发现了一个解决方案,并选择了正则表达式,因为所有源文件的名称中都有“存储库”:

@WebMvcTest(excludeFilters = {@ComponentScan.Filter(
type = FilterType.REGEX, 
pattern = ".*[Repository]")}
)
© www.soinside.com 2019 - 2024. All rights reserved.