2015-11-20 85 views
0

我刚刚进入代码测试。我之前完成了单元测试,但并没有真正将它们隔离开来。所以他们更像是整合测试(间接)。我想给Mockito一个尝试,并将其添加到我的Intellij IDE中。 但我不知道如何真正实施嘲笑。在他们的网站上有一些例子,但我无法围绕嘲笑的概念包裹我的头。我知道人们使用模拟来隔离单元测试,以确保错误在单元本身而不是依赖。嘲笑Mockito中的DAO

我写了下面:

@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和ArrayLists的添加/删除组成,它们充当当代数据库存储。简介:如何模拟SQLDUMMY类(DAO),因此它不再是单元测试的依赖项?

回答

2

您需要阅读Mockito如何工作。 其基本思想是它扩展了你的类,并且覆盖了所有的方法,并且允许你返回你想要的东西。

语法是:

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

很好的例子。我还推荐Mockito javadoc,其中有一个很棒的教程:http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html –

+0

绝对精彩!我现在明白了。我不明白他们通过实例化一个已经存在的类并调用它并返回一个期望的值意味着什么。 现在我明白他们的意思了。 (当你有一个与你的问题相关的例子时,这很简单。)再次感谢! – Danny