2017-08-01 96 views
0

我正在準備一個測試用例場景,我在properties文件中將這些值與他們的密鑰進行了測試。我希望如果所有關鍵值都滿足其相應的值,該方法應該返回true,否則返回false。如何使用junit中的屬性文件測試參數

下面是我的代碼:

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

此代碼存在各種問題。首先:

private boolean expected; 

你宣稱場 - 但你永遠不會一個值分配給它。因此它被初始化爲false並保持false。所以不要指望將它與true可以解決的問題進行比較。

但除此之外:您使用的方式Parametrized不會使任何的意義。這個特殊跑步者的想法是:@Parameters「thing」包含多個值;並且您的測試在每個條目的循環中調用。在那裏有一個單一的文件名 - 這就像「買一輛卡車然後運送一個手提箱」。含義:你寧願在那裏指定一個鍵/值條目列表;然後(例如)確保屬性文件包含所有這些條目。或類似的東西。

所以真正的答案是:退一步瞭解基礎知識。例如,您使用靜態也意味着您不瞭解什麼是靜態實際上是什麼,以及何時使用它。然後關注 JUnit教程(普通JUnit)。當你想到如何正確使用它,然後閱讀關於@Parametrized的教程。

換句話說:當你缺乏基本的理解時,不要應用「試錯法」。這種策略只有作品,當你有足夠的經驗,並不總是錯誤立即爲任何你嘗試。