在我们的Spring web应用程序中,我们使用Spring bean概要文件区分三种场景:开发、集成和生产。我们使用它们连接到不同的数据库或设置其他常量。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = ["classpath:applicationContext.xml"])
public class MyTestIT
{
@Autowired
@Qualifier("myRemoteURL") // a value from the web-app's applicationContext.xml
private String remoteURL;
...
}
我可以使用@activeprofiles
使它在本地运行,但这是硬编码的,会导致我们的测试在构建服务器上失败。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = ["classpath:applicationContext.xml"])
@ActiveProfiles("development")
public class MyTestIT
{ ... }
我还尝试使用@webappconfiguration
,希望它能以某种方式从Maven导入spring.profiles.active
属性,但这不起作用。
另一个注意事项是,我们还需要配置代码,以便开发人员可以运行web应用程序,然后使用IntelliJ的测试运行器(或其他IDE)运行测试。这对于调试集成测试来说要容易得多。
正如其他人已经指出的那样,您可以选择使用Maven设置spring.profiles.active
系统属性,确保不使用@activeprofiles
,但这对在IDE中运行的测试不方便。
对于设置活动配置文件的编程方法,您有几个选项。
ContextLoader
,通过在上下文的环境
中设置活动配置文件来准备上下文。ContextLoader
仍然是一个选项,但更好的选择是实现ApplicationContextInitializer
并通过@ContextConfiguration
的Initializers
属性配置它。您的自定义初始值设定器可以通过编程设置活动配置文件来配置环境
。ActiveProfilesResolver
API正是为了这个目的:以编程方式确定要在测试中使用的活动配置文件集。可以通过@activeprofilesresolver
的resolver
属性注册activeprofilesresolver
。问候,
Sam(Spring TestContext框架的作者)
我正在尝试将Spring Boot应用程序的一些集成测试从迁移到。目前,测试使用的是 当测试运行时,被配置为使用与服务器运行时相同的基本URL和(随机选择的)端口。 在我的一个测试中,我登录并保存authorization-response头值,以便在后续的API调用中使用。我试着将它迁移到,就像这样 但是当我像这样创建实例时,它没有配置为使用与应用程序相同的端口。 我尝试使用的依赖注入实例 这确
使用Spock运行集成测试(例如)的最佳方式是什么?我想引导整个Spring Boot应用程序,并执行一些HTTP调用来测试整个功能。 我可以用JUnit(首先运行应用程序,然后执行测试): 但是有了Spock,应用程序就不会启动了:
我们有一个Spring应用程序,使用Gradle构建,使用Spring Boot 1.2.5运行。释放。我们编写了一些初始集成测试,使用Rest-Assured对Restendpoint进行测试。这起到了作用,我们的应用程序的RESTendpoint通过浏览器和Postman进行了适当的响应。 然后我们使用Spring Security实现了一个OncePerRequest estFilter和我
集成测试是对已经进行单元测试的各个部分的一种整合测试。集成是昂贵的,并且它出现在测试中。你必须把这个考虑到你的预计和时间表里。 理想情况下,你应该这样组织一个项目,使得最后没有一个阶段是必须通过显式集成来进行的。这比在项目过程中,随着事情完成逐渐集成事情要好得多。如果这是不可避免的,请仔细评估。
我知道这方面有几个问题...但我仍然无法使其工作。我有一个Spring应用程序,我正在尝试为其编写集成测试。我尝试使用xml文件设置应用程序上下文(或多或少与我用于应用程序的xml文件相同)。出现的问题如下: > 我指定了正确的路径,然后它开始抱怨在类路径上找不到资源。我已经复制了test/resources文件夹中缺少的文件。 现在,它无法加载应用程序上下文并出现以下错误:没有找到[javax.
Gradle4.6增加了对JUnit5的支持。 只要我没有用于例如集成测试的另一个sourceset,这对我是有效的:我不知道如何在我的集成测试中启用。 我所能做的是让任务与新的JUnit5支持一起工作,但我的任务使用JUnit5控制台并从命令行运行测试。最后,我在gradle中放弃对JUnit5的支持,并回滚到使用JUnit5控制台进行两个测试。 除了之外,如何在其他任务上启用Gradle4.6