在Mockito中模拟DAO



我刚刚开始测试代码。我以前做过单元测试,但还没有真正隔离它们。所以它们更像是集成测试(间接地)。我想试试Mockito,我已经把它添加到了我的Intellij IDE中。但我根本不知道如何真正实现嘲讽。他们的网站上有一些例子,但我无法理解嘲笑的概念。我知道有人使用mocking来隔离单元测试,以确保错误在单元本身中,而不是在依赖关系中。

我写了以下内容:

@Test
public void testChangeMemberReturnsTrue() throws Exception {
    Member tempMem = new Member();
    tempMem.setMemberFirstName("Swagrid");
    tempMem.setMemberLastName("McLovin");
    tempMem.setMemberID("SM666");
    SQLDUMMY.saveMember(tempMem);               //Save member to dummy DB.
    Member checkMem = new Member();
    ArrayList<Member> memArr = SQLDUMMY.getAllMembers();
    for (Member m : memArr) {                   // Look through all saved members
        if (m.equals(tempMem)) {                // If match, save to checkMem
            checkMem = m;
        }
    }
    assertTrue(tempMem.equals(checkMem));            // Make sure they are really equal.
    String newfirstname = "Darius";
    String newlastname = "DunkMaster";
    assertTrue(memhandling.changeMember(tempMem, newfirstname, newlastname));
}

这里是实际的方法:

public boolean changeMember(Member mem, String n1, String n2) {
    try {
        ArrayList<Member> memArr = SQLDUMMY.getAllMembers();
        for (Member m : memArr) {
            if (m.equals(mem)) {
                m.setMemberFirstName(n1);
                m.setMemberLastName(n2);
                m.setMemberID(ensureUniqueID(m, m.getMemberID())); //Just a method call to another method in the same class to ensure ID uniqueness.
                return true;
            }
            else {
                return false;
            }
        }
    }
    catch (Exception e) {
        System.out.println("Error4.");
    }
    return false;
}

我想模拟SQLDUMMY(我创建它只是为了看看我的测试是否能通过,他们确实通过了。)

public class SQLDUMMY {
private static ArrayList<Member> memberList = new ArrayList<>();
private static ArrayList<Ship> shipList = new ArrayList<>();
public static ArrayList<Member> getAllMembers() {
    return memberList;
}
public static void saveMember(Member m) {
    memberList.add(m);
}
public static void deleteMember(Member memIn) {
    memberList.remove(memIn);
}

public static void saveShip(Ship newShip) {
    shipList.add(newShip);
}
public static ArrayList<Ship> getAllShips() {
    return shipList;
}
public static void deleteShip(Ship s) {
    shipList.remove(s);
}

}

它基本上只是由getter和ArrayLists的add/remove组成,它们充当当代的DB存储。

摘要:如何模拟SQLDUMMY类(DAO),使其不再是单元测试的依赖项?

您需要了解Mockito的工作原理。其基本思想是,它扩展了类和重写所有方法,并允许您返回所需的内容。

语法为:

SQLDummy sqlDummy = Mockito.mock(SQLDummy.class);
Mockito.when(sqlDummy.getAllShips()).thenReturn(new ArrayList< Ship >())

相关内容

  • 没有找到相关文章

最新更新