2013-10-08 48 views
1

這是我的第一篇文章!assertTrue和assertFalse在同一個JUnit測試中

我想在使用JUnit4的同一測試中同時使用assertTrue(boolean)assertFalse(boolean)。我正在使用參數化,所以我想包含將會通過測試失敗的參數,以驗證它們實際上是否失敗。

我正在測試的方法接受一個字符串,檢查字符串是否處於可接受的貨幣格式(僅數字,無字母,小數點後最多2位數字),並返回帶有2個鍵的HashMap:VALID其中是一個表示字符串有效性的布爾值作爲貨幣,FORMATTING是將字符串添加到原始有效字符串中以確保所有有效字符串都以小數點結尾,並在此後精確地爲2位數。無效的字符串將不會被格式化。

這裏是我的代碼:

@RunWith(value = Parameterized.class) 
public class CheckCurrencyFormatTest { 

private String input; 
private String output; 

@Parameters 
public static Collection<String[]> data() { 
    String[][] data = { 
     {"1", "1.00"}    //return true 
     ,{"1.", "1.00"}    //return true 
     ,{"1.0", "1.00"}   //return true 
     ,{"1.00", "1.00"}   //return true 
     //,{"1.000", "1.000"}   //return false 
     //,{"m","m"}     //return false 
    }; 
    return Arrays.asList(data); 
} 

public CheckCurrencyFormatTest(String input, String output) { 
    this.input = input; 
    this.output = output; 
} 

@Test 
public void testCheckString() { 
    CheckCurrencyFormat ccf = new CheckCurrencyFormat(); 
    HashMap hm; 
    boolean valid; 
    String resultString; 

    valid = false; 
    resultString = ""; 
    hm = ccf.checkString(input); 
    for (Object key : hm.keySet()) { 
     if ("VALID".equals(key.toString())){ 
      valid = Boolean.parseBoolean(hm.get(key).toString()); 
     } 
     if ("FORMATTING".equals(key.toString())){ 
      System.out.println(input + " and add " + hm.get(key).toString()); 
      resultString = input+(hm.get(key).toString()); 
     } 
    } 
    assertTrue(valid); 
    //assertFalse(valid); 
    assertEquals(output, resultString); 
} 

測試與註釋掉以下行成功運行:,{"1.000", "1.000"},{"m","m"}assertFalse(valid);

太感謝您了。

回答

4

添加一個 「期望的結果」 字段

private String input; 
private String output; 
private boolean expectedResult; 

@Parameters 
public static Collection<Object[]> data() { 
    Object[][] data = { 
     {"1", "1.00", true}    //return true 
     ,{"1.", "1.00", true}    //return true 
     ,{"1.0", "1.00", true}   //return true 
     ,{"1.00", "1.00", true}   //return true 
     ,{"1.000", "1.000", false}   //return false 
     ,{"m","m", false}     //return false 
    }; 
    return Arrays.asList(data); 
} 

而且在測試方法:

assertTrue(valid == expectedResult); 
+1

這是完美的......幾乎。 'data'是一個String數組。 'true'和'false'不會削減它。 ''true「'和'」false「'是可以的,以及'assertTrue(valid == Boolean.parseBoolean(expectedResult));'。感謝mil – mojo

+1

@ user2313901'data'應該是'Object []'。如果您的構造函數使用'(String,String,boolean)'' –

+0

@JohnB,那麼JUnit可以處理這些轉換完成:)謝謝 – mojo