gpt4 book ai didi

java - 在 Mockito 中模拟 DAO

转载 作者:行者123 更新时间:2023-12-01 21:59:21 26 4
gpt4 key购买 nike

我刚刚开始测试代码。我以前做过单元测试,但没有真正隔离它们。所以它们更像是集成测试(间接)。我想尝试一下 Mockito,并将其添加到我的 Intellij IDE 中。但我根本不知道如何实际实现模拟。他们的网站上有一些例子,但我就是无法理解模拟的概念。我知道人们使用模拟来隔离单元测试,以确保错误出现在单元本身而不是依赖项中。

我写了以下内容:

@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(我创建它只是为了看看我的测试是否会通过,他们确实通过了。)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 和添加/删除充当当代数据库存储的 ArrayList 组成。

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

最佳答案

您需要阅读 Mockito作品。基本思想是,它扩展了您的类并覆盖了所有方法,并允许您返回您想要的任何内容。

语法是:

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

关于java - 在 Mockito 中模拟 DAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33829691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com