我正在做一个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]>
答案 0 :(得分:1)
您必须了解,当不覆盖equals方法时,assertEquals的行为与assertSame相同。更新测试以检查集合和/或集合的每个元素的大小,如下所示:
assertEquals(al.size(),api.getProjectNames().size());
assertTrue(al.containsAll(api.getProjectNames()));
请注意,集合的顺序可能会有所不同,但仍可以通过测试。如果您还需要匹配的订单,请对集合进行排序并逐一检查每个项目。