2016-08-04 28 views
0

我想加快对API的自动验收测试,而且我发现这样做的最佳方式是创建一个允许自动接受测试的API端点在每次测试运行后擦拭我的数据库。与其他技术相比,这给了我戏剧性的性能提升。导入的Spring MVC @Controller在maven测试或提供的示波器中不可用

但是,将API与端点一起发运似乎是一个坏主意,允许删除数据库的全部内容。即使我确保了端点的安全,但它似乎仍然是一个糟糕的主意。因此,为了避免传送删除端点,我将带有删除端点的@Controller包括到它自己的Maven模块中,然后尝试在我的API中使用Maven的'测试'范围包含该Maven模块(然后'提供'的范围,当没有工作)。不幸的是,如果我正在使用“测试”或“提供的”范围,似乎找不到具有删除逻辑的控制器。当我使用默认范围导入时(或者没有明确设置范围),它被发现。

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

回答

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 

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

+0

你说得对,“你可以自动装载你的仓库/ DAO并直接擦除数据,而不是通过API公开”,这是更好的选择。因为这些测试是BDD调用REST端点,所以它并没有跨越我的想法,我可以简单地自动装入我的bean。如果我正在使用测试或提供的范围,仍然没有找到bean ...不知道为什么.... –

相关问题