导入的Spring MVC @Controller在maven测试或提供的范围中不可用

时间:2016-08-04 21:26:25

标签: spring-mvc spring-boot maven-2

我想加快我对API的自动验收测试,我发现这样做的最好方法是创建一个API端点,允许自动验收测试在每次测试运行后擦除我的数据库。与其他技术相比,这给我带来了显着的性能提升。

然而,使用端点发送我的API似乎是一个坏主意,允许删除数据库的全部内容。即使我保护端点,它仍然是一个坏主意。

所以..为了避免发送删除端点,我将带有删除端点的@Controller包含在它自己的maven模块中,然后尝试在我的API中使用maven的'test'范围包含该maven模块(然后'提供'范围何时不起作用)。不幸的是,如果我使用“测试”或“提供”范围,似乎找不到具有删除逻辑的控制器。当我使用默认范围导入(或未显式设置范围)时,会发现它。

我错过了什么?为什么我没有尝试工作?

1 个答案:

答案 0 :(得分:0)

您可以使用Spring个人资料。使用@Profile注释注释您的控制器:

@Controller
@Profile("acceptance")
public class SpecialController {
    @RequestMapping("/stuff")
    public void doDangerousStuff() {
        // ...
    }
}

现在,如果您使用属性spring.profiles.active运行应用程序进行验收测试,则可以控制是否应加载此bean。

我不知道你是如何开始申请的,但如果你使用mvn spring-boot:run,你可以使用:

mvn spring-boot:run -Dspring.profiles.active=acceptance

尽管如此,我发现你的用例有点奇怪,因为如果你使用 spring-boot-starter-test ,你已经可以在测试中编写JUnit测试并从应用程序中自动装配bean,所以你可以自动装配您的存储库/ DAO并直接擦除数据,而不是通过API公开它。