如何使用junit中的属性文件测试参数

时间:2017-08-01 08:07:00

标签: java junit

我正在准备一个测试案例场景,我将要测试的值与properties文件中的键进行对比。我想如果所有键值都满足其相应的值,则该方法应返回true,否则返回false。

以下是我的代码:

package mypackTest;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import static org.junit.Assert.assertThat;

@RunWith(Parameterized.class)
public class Test123 {

    static Properties p = null;
    private boolean expected;

    @Parameters
    public static List<String[]> data() 
    {
      String[][] data = new String[][] { { "D:\\personal\\config.properties" }};
   return Arrays.asList(data);
    }


    @BeforeClass
    public static void setup()
    {  
          p = new Properties();
        try 
        {
           //load a properties file 
            p.load(new FileReader(new File("D:\\personal\\config.properties")));
        } 
        catch (IOException ex) 
        {
       ex.printStackTrace();
        }
}



    @Test
    public void do_test() {

        assertThat(TestThis.letstest(p.getProperty("abc1"), p.getProperty("abc2")), is(expected));
    }
}

我要测试的课程:

package mypackTest;

public class TestThis {

    public static boolean letstest(String abc1,String abc2){
        if(abc1.equals("xyz1")&& abc2.equals("xyz2")){
            return true;
        }
        return false;
    }
}

属性文件

abc1=xyz1
abc2=xyz2

TestRunner类

package mypackTest;

import java.util.Enumeration;

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

import junit.framework.TestFailure;
import junit.framework.TestResult;
import junit.framework.TestSuite;

public class TestRunner {
    public static void main(String[] args) {

              Result result = JUnitCore.runClasses(CalculatorTest.class);

              for (Failure failure : result.getFailures()) {
                 System.out.println(failure.toString());
              }

              System.out.println(result.wasSuccessful());
    }
}

我的输出低于输出

输出

do_test0:错误的参数数量

1 个答案:

答案 0 :(得分:1)

此代码存在各种问题。首先:

private boolean expected;

您正在声明该字段 - 但您从不为其分配值。因此,它被初始化为false并保持false。所以不要指望将它与true能够解决的问题进行比较。

但除此之外:您使用Parametrized的方式不会使任何感觉。这个特殊跑步者的想法是:@Parameters“thing”包含多个值;并在每个条目的循环中调用您的测试。在那里有一个单个文件名 - 就像“买一辆卡车然后运送一个行李箱”。含义:您希望在那里指定键/值条目列表;然后(例如)确保属性文件包含所有这些条目。或类似的东西。

所以真正的答案是:退后一步,了解基础知识。例如,您对静态的使用也暗示您不了解 static 实际上是什么,以及何时使用它。然后关注 JUnit教程(普通JUnit)。当您想出如何正确使用它时,请阅读有关@Parametrized的教程。

换句话说:当你缺乏基本的理解时,不要申请“反复试验”。当您有足够的经验时,此策略可以立即为您尝试的任何内容提供错误