2013-10-08 20 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