Я просто разбираюсь в коде. Я уже делал модульные тесты, но на самом деле их не изолировал. Поэтому они больше походили на интеграционный тест (косвенно). Я хочу дать Mockito попробовать, и я добавил его в свою Intellij IDE. Но я понятия не имею, как на самом деле реализовать насмешку вообще. На их веб-сайте есть примеры, но я просто не могу окунуться в концепцию насмешки. Я знаю, что один из насмехается, чтобы изолировать модульное тестирование, чтобы убедиться, что ошибки находятся в самом блоке, а не в зависимости.Mocking DAO в Mockito
я написал следующее:
@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);
}
}
Он в основном состоит из геттеров и добавляет/удаляет для ArrayLists, которые выступают в качестве современного хранилища БД.
Резюме: Как я могу высмеять класс SQLDUMMY (DAO), чтобы он больше не зависел от тестов Unit?
Великий пример. Я также рекомендую Mockito javadoc, который имеет большой учебник в обзоре: http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html –
Абсолютно замечательно! Я получаю это сейчас. Я не понимал, что они означают, создавая экземпляр уже существующего класса и вызывая его и возвращая ожидаемое значение. Теперь я понимаю, что они имели в виду. (Это так просто, когда у вас есть пример, связанный с вашей проблемой.) Еще раз спасибо! – Danny