0

我正在尝试编写一个从字符串数组加载不同属性文件的测试。但是代码不断抛出空指针异常,请问有什么想法吗?

@RunWith(value = Parameterized.class)
public class AllTests 
{ 
     private static String text;
     private static Properties props;

     public AllTests(String text) 
     {
        AllTests.text= text;
     }

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

         @BeforeClass
     public static void setup()
     {  
           props = new Properties();
         try 
         {
            //load a properties file 
        props.load(new FileInputStream(text));
         } 
         catch (IOException ex) 
         {
        ex.printStackTrace();
         }
 }

 @Test
 public void test() 
 {
        System.out.println(text);
 }}

我做了一些进一步的调查,发现 @Test 存根有效,但 @BeforeClass 返回 null,我可以不使用设置中的参数吗?

@RunWith(value = Parameterized.class)
公共类 AllTests
{
     私有静态字符串客户端;

public AllTests(String client) { AllTests.client = client; } @Parameters public static Collection<Object[]> data() { Object[][] data = new Object[][] { { "oxfam.properties" }}; return Arrays.asList(data); } @BeforeClass public static void setup() { System.out.println(client); } @Test public void test() { System.out.println(client); }}

4

2 回答 2

3

props变量永远不会被初始化。尝试在声明时对其进行初始化:

private static Properties props = new Properties();
于 2013-05-22T15:12:06.873 回答
1

正如布伦特所说,最初的错误是因为道具没有初始化。但是,您的测试不起作用的原因是因为您使用的是静态字段。它们应该是实例字段,只有data()应该是静态的。

以下作品:

@RunWith(value = Parameterized.class)
public class AllTests {
  private String text;
  private Properties props;

  public AllTests(String text) {
    this.text = text;
    props = new Properties();
    try {
      // load a properties file
      props.load(new FileInputStream(text));
    } catch (IOException ex) {
      ex.printStackTrace();
    }
  }

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

  @Test
  public void test() {
    System.out.println(text);
  }
}

JUnit 调用该data()方法,然后为该方法AllTests返回的每个值创建一个类的实例data(),构造函数参数也来自该data()方法。因此,您的 text 和 props 字段应该是实例字段。

因此,在您的示例中,您@BeforeClass在构造函数之前被调用,因此出现空指针异常。

于 2013-05-22T18:37:45.277 回答