导入的 Spring MVC @Controller 在 Maven 测试或提供的范围中不可用
Imported Spring MVC @Controller not available in maven test or provided scopes
我想加快 API 的自动验收测试,我发现最好的方法是创建一个 API 端点,允许自动验收测试擦除我的每次测试后的数据库 运行。与其他技术相比,这给了我显着的性能改进。
但是,将我的 API 与允许删除数据库的全部内容的端点一起发送似乎不是一个好主意。即使我保护端点,这似乎仍然是个坏主意。
所以..为了避免传送删除端点,我将带有删除端点的@Controller 包含到它自己的 Maven 模块中,然后尝试使用 Maven 的 [=19= 在我的 API 中包含那个 Maven 模块] 范围(然后 'provided' 范围,当它不起作用时)。不幸的是,如果我使用 'test' 或 'provided' 范围,似乎找不到具有删除逻辑的控制器。它是在我使用默认范围(或未明确设置范围)导入时发现的。
我错过了什么?为什么我正在尝试的方法不起作用?
您可以使用 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从测试中的应用程序,因此您可以自动装配 repositories/DAO 并直接擦除数据,而不是通过 API.
公开数据
我想加快 API 的自动验收测试,我发现最好的方法是创建一个 API 端点,允许自动验收测试擦除我的每次测试后的数据库 运行。与其他技术相比,这给了我显着的性能改进。
但是,将我的 API 与允许删除数据库的全部内容的端点一起发送似乎不是一个好主意。即使我保护端点,这似乎仍然是个坏主意。
所以..为了避免传送删除端点,我将带有删除端点的@Controller 包含到它自己的 Maven 模块中,然后尝试使用 Maven 的 [=19= 在我的 API 中包含那个 Maven 模块] 范围(然后 'provided' 范围,当它不起作用时)。不幸的是,如果我使用 'test' 或 'provided' 范围,似乎找不到具有删除逻辑的控制器。它是在我使用默认范围(或未明确设置范围)导入时发现的。
我错过了什么?为什么我正在尝试的方法不起作用?
您可以使用 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从测试中的应用程序,因此您可以自动装配 repositories/DAO 并直接擦除数据,而不是通过 API.
公开数据