如何在Junit中模拟属性文件

时间:2016-11-30 09:26:07

标签: java unit-testing junit mockito

我正在使用Junit创建一个单元测试用例。现在我的应用程序是Maven基于许多配置文件我也使用配置文件(属性文件)中的值,它从一个配置文件变为其他配置文件。我希望单元测试运行在运行测试用例时只指定属性而不是配置文件。 这些可以通过两种方式完成 1)我嘲笑单元测试的属性文件。(我不知道如何)。 2)或者在运行期间我更改属性文件参数值。(再次难以回答)。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

一个选项:使用依赖注入以获取java.util.Properties对象,例如。

含义:您的生产代码只包含一个Properties对象;像:

class Foo {
  private final Properties properties;

  public Foo(Properties) { 
    this.properties = properties;

在运行时,当创建Foo对象的类从磁盘读取属性文件时,将它们转换为Properties对象并将其提供给Foo构造函数。

在单元测试中,测试代码会创建一个Properties对象,并在创建Foo对象时添加所需的任何值。

不太优雅的绕道:确保您的生产代码从运行时定义的位置读取其属性。这将允许您在某个临时目录中创建自定义属性文件,然后指示您的测试代码使用这些文件。

答案 1 :(得分:0)

没有完全确切地提出您的问题 - 一方面,您说:您不想使用与个人资料相关的值,而您正在说的另一方面:您需要使用特定值运行(请执行此操作)你的意思是运行时值或测试特定值。)

现在,回答你的第一个问题: 1)我要么模拟单元测试的属性文件: 您可以实例化并加载属性文件(特定于测试)并在该文件中保留所需的值。

2)或者在运行时我更改属性文件参数值: 您可以使用值模拟特定的属性键。如下所示:

 public void shouldBuyBread() throws Exception {
    //given
    given(mypropertyUtil.getProperty("NUMBER_OF_BREADS")).willReturn(10);

    //when
    Goods goods = shop.buyBread();

    //then
    assertThat(goods, containBread());
  }