这是我的第一篇文章!
我想在使用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);
谢天谢地。
答案 0 :(得分: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);