文档章节

Spring、Spring Boot和TestNG测试指南 - @TestPropertySource

jarchan
 jarchan
发布于 2017/08/29 09:08
字数 436
阅读 33
收藏 0

码云地址

@TestPropertySource可以用来覆盖掉来自于系统环境变量、Java系统属性、@PropertySource的属性。

同时@TestPropertySource(properties=...)优先级高于@TestPropertySource(locations=...)

利用它我们可以很方便的在测试代码里微调、模拟配置(比如修改操作系统目录分隔符、数据源等)。

例子1: 使用Spring Testing工具

我们先使用@PropertySource将一个外部properties文件加载进来,PropertySourceConfig

@Configuration
@PropertySource("classpath:me/chanjar/annotation/testps/ex1/property-source.properties")
public class PropertySourceConfig {
}
file: property-source.properties
foo=abc

然后我们用@TestPropertySource覆盖了这个property:

@TestPropertySource(properties = { "foo=xyz" ...

最后我们测试了是否覆盖成功(结果是成功的):

@Test
public void testOverridePropertySource() {
  assertEquals(environment.getProperty("foo"), "xyz");
}

同时我们还对@TestPropertySource做了一些其他的测试,具体情况你可以自己观察。为了方便你观察@TestPropertySource对系统环境变量和Java系统属性的覆盖效果,我们在一开始打印出了它们的值。

源代码TestPropertyTest

@ContextConfiguration(classes = PropertySourceConfig.class)
@TestPropertySource(
    properties = { "foo=xyz", "bar=uvw", "PATH=aaa", "java.runtime.name=bbb" },
    locations = "classpath:me/chanjar/annotation/testps/ex1/test-property-source.properties"
)
public class TestPropertyTest extends AbstractTestNGSpringContextTests implements EnvironmentAware {

  private Environment environment;

  @Override
  public void setEnvironment(Environment environment) {
    this.environment = environment;
    Map<String, Object> systemEnvironment = ((ConfigurableEnvironment) environment).getSystemEnvironment();
    System.out.println("=== System Environment ===");
    System.out.println(getMapString(systemEnvironment));
    System.out.println();

    System.out.println("=== Java System Properties ===");
    Map<String, Object> systemProperties = ((ConfigurableEnvironment) environment).getSystemProperties();
    System.out.println(getMapString(systemProperties));
  }

  @Test
  public void testOverridePropertySource() {
    assertEquals(environment.getProperty("foo"), "xyz");
  }

  @Test
  public void testOverrideSystemEnvironment() {
    assertEquals(environment.getProperty("PATH"), "aaa");
  }

  @Test
  public void testOverrideJavaSystemProperties() {
    assertEquals(environment.getProperty("java.runtime.name"), "bbb");
  }

  @Test
  public void testInlineTestPropertyOverrideResourceLocationTestProperty() {
    assertEquals(environment.getProperty("bar"), "uvw");
  }

  private String getMapString(Map<String, Object> map) {
    return String.join("\n",
        map.keySet().stream().map(k -> k + "=" + map.get(k)).collect(toList())
    );
  }
}

例子2: 使用Spring Boot Testing工具

@TestPropertySource也可以和@SpringBootTest一起使用。

源代码见TestPropertyTest

@SpringBootTest(classes = PropertySourceConfig.class)
@TestPropertySource(
    properties = { "foo=xyz", "bar=uvw", "PATH=aaa", "java.runtime.name=bbb" },
    locations = "classpath:me/chanjar/annotation/testps/ex1/test-property-source.properties"
)
public class TestPropertyTest extends AbstractTestNGSpringContextTests implements EnvironmentAware {
  // ... 
}

参考文档

© 著作权归作者所有

共有 人打赏支持
jarchan

jarchan

粉丝 60
博文 11
码字总数 8798
作品 2
崇明
技术主管
Spring Boot 和 testNG 和 eclipse背景色

通过之前的博文,我们已经验证,Spring环境下完成access数据访问没有问题。下面我们直接在Spring环境下部署我们的升级项目。 1.导入Spring Boot Spring Boot是Spring的子项目,用来解决项目配...

pandamonica
2017/09/19
0
0
eclipse上cxf与testNG的冲突

我打算在eclipse上的一个maven项目的某一个类发布,成为web service,打算使用cxf进行发布。 最初这个测试用的maven项目是这样的: 也就是说,在导入cxf之前,这个maven项目的功能是可以正常...

pandamonica
09/07
0
0
An internal error occurred during: "Building UI model". com/google/common/base/Function

版权声明:本文为 testcsdn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。 https://blog.csdn.net/testcsdn/article/details/78798610 An internal error occurred during: "...

微wx笑
2017/12/14
0
0
25 extentreports/allure美化测试报告

最近好多在微信问关于测试报告生成问题。其实TestNG执行结果就已经自带了测试报告,只是比较丑。 这里我就顺便推荐下另外的两种Report,但是文档我就不细写了,只大概写下用法。 extentrepo...

米阳MeYoung
08/07
0
0
Selenium和TestNG

本文档由Felipe Knorr Kuhn撰写,并根据其博客上发布的一系列文章进行改编。 建模您的测试用例 在编写测试用例之前,您需要知道如何验证以及将要验证的内容。让我们使用WordPress “创建新帖...

xmilt
08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx的简单使用:负载均衡

nginx:反向代理的服务器;用户发送请求到nginx,nginx把请求发送给真正的服务器,等待服务器处理完数据并返回,再把数据发送给用户。 nginx作为一个反向代理服务器,能缓存我们项目的静态文...

osliang
11分钟前
1
0
网站title标题被改并被百度网址安全中心提醒的解决办法

国庆假日期间我们Sine安全接到众多网站站长求助网站标题被改导致在百度搜索中百度安全中心提醒被拦截,导致网站正常用户无法浏览网站被跳转到一些菠菜du博网站,而且很明显的一个特征就是在百...

网站安全
13分钟前
1
0
JDK版本与major.minor version的对照关系

其实,只需要记住jdk6对于major.minor version 50即可,其他版本自行计算即可。 ---------------------

码代码的小司机
15分钟前
1
0
Gitlab安装

具体步骤如下: sudo yum install -y curl policycoreutils-python openssh-server cronie sudo lokkit -s http -s ssh sudo yum install postfix sudo service postfix start sudo chkconfi......

很好亦平凡ms
23分钟前
1
0
C++基础教程面向对象学习笔记及心得感悟[图]

C++基础教程面向对象学习笔记及心得感悟[图] 使用友元函数重载算术运算符: C ++中一些最常用的运算符是算术运算符 - 即加号运算符(+),减运算符( - ),乘法运算符(*)和除法运算符(/...

原创小博客
24分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部