HashMap返回“空”以进行jUnit测试

时间:2019-06-12 19:11:22

标签: java junit

我正在做一个Java作业,我们必须创建一个“项目类”,然后填充指定的方法以使它们起作用,这将由jUnit类进行测试。

所以我有这样的Project类:

public class Project {

    private String name;
    private Calendar start=null;
    private Calendar end=null;


    public Project(Calendar start, Calendar end)
    {
        this.start=start;
        this.end=end;
    }
 }

然后创建一个createProject方法,例如:

public static final HashMap<String, Project> proj_map = new HashMap<>();


@Override
public boolean createProject(String projectName, Calendar startDate, Calendar endDate) {

    try {
        proj_map.put(projectName,new Project(startDate,endDate));
    } catch (Exception e)
    {
        return false;
    }
    return true;
}

public ArrayList<String> getProjectNames() {
    ArrayList<String> keys = new ArrayList<>(proj_map.keySet());
    return keys;
}

和jUnit测试类:

class CreateHappyPath{
    @Test
    void createProject() {
        assertEquals(true, api.createProject( "p1",new GregorianCalendar(2019,5,12), new GregorianCalendar(2019,6,13)));
        ArrayList<String> al =new ArrayList<String>();
        al.add("p1");
        assertEquals(al,api.getProjectNames());
    }

但是如果我运行它,我的jUnit结果是:

org.opentest4j.AssertionFailedError: expected: <[p1]> but was: <[p1,p2]>

1 个答案:

答案 0 :(得分:1)

您必须了解,当不覆盖equals方法时,assertEquals的行为与assertSame相同。更新测试以检查集合和/或集合的每个元素的大小,如下所示:

 assertEquals(al.size(),api.getProjectNames().size());
 assertTrue(al.containsAll(api.getProjectNames()));

请注意,集合的顺序可能会有所不同,但仍可以通过测试。如果您还需要匹配的订单,请对集合进行排序并逐一检查每个项目。