我想在测试类中测试集合元素,肉类可以获取集合元素。
我使用getcollection.get()获取元素,并在get方法中将集合强制转换为ArrayList类型,但这似乎没有效果。
public Recipe(String name, String description, double price, Ingredient... ingredients) {
if(ingredients==null ) {
throw new IllegalArgumentException("ingredients can't be null or an empty string");
}
custmerOrderIngredients=new ArrayList<Ingredient>();
for (Ingredient ingredient : ingredients) {
custmerOrderIngredients.add(ingredient);
}
}
public Collection<Ingredient> getIngredients() {
return (ArrayList<Ingredient>)custmerOrderIngredients;//here i case the collection to an ArrayList type.//
}
@Test
public void testGetIngredients() throws Exception {
Ingredient in1=new Ingredient("burger");
Ingredient in2=new Ingredient("chicken");
Recipe r1=new Recipe("Beef burger", "burger with beef", 5.00,in1,in2);
assertEquals("burger", r1.getIngredients().get(0).getName());
}
/**
*Ingredient
*/
public Ingredient(String name) throws Exception {
if(name==null)
throw new IllegalArgumentException("Name parameter is null.");
name = name.trim().toLowerCase();
name = name.substring(0,1).toUpperCase()+name.substring(1);
this.name=name;
}
我希望assertEquals可以成功测试集合中包含“汉堡”元素。
答案 0 :(得分:0)
问题出在Ingredient
类构造函数中:
name = name.trim().toLowerCase();
name = name.substring(0,1).toUpperCase()+name.substring(1);
您对name
对象执行一些计算。最终的结果是“汉堡”。
“汉堡”不等于“汉堡”。这就是为什么您的assert方法不起作用的原因。
如果要比较不区分大小写的名称,可以这样:
assertThat("burger", IsEqualIgnoringCase.equalToIgnoringCase(r1.getIngredients().get(0).getName()));
或简单地将实际的小写转换为小写:
assertEquals("burger", r1.getIngredients().get(0).getName().toLowerCase());