如何在测试类中测试集合中的元素?

时间:2019-03-27 16:43:30

标签: java junit

我想在测试类中测试集合元素,肉类可以获取集合元素。

我使用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可以成功测试集合中包含“汉堡”元素。

1 个答案:

答案 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());