我想加快我对API的自动验收测试,我发现这样做的最好方法是创建一个API端点,允许自动验收测试在每次测试运行后擦除我的数据库。与其他技术相比,这给我带来了显着的性能提升。
然而,使用端点发送我的API似乎是一个坏主意,允许删除数据库的全部内容。即使我保护端点,它仍然是一个坏主意。
所以..为了避免发送删除端点,我将带有删除端点的@Controller包含在它自己的maven模块中,然后尝试在我的API中使用maven的'test'范围包含该maven模块(然后'提供'范围何时不起作用)。不幸的是,如果我使用“测试”或“提供”范围,似乎找不到具有删除逻辑的控制器。当我使用默认范围导入(或未显式设置范围)时,会发现它。
我错过了什么?为什么我没有尝试工作?
答案 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公开它。