如何模拟期望返回HashMap的方法



我有一个方法,它应该返回HashMap类型的结果,我需要对它进行单元测试。该方法应该接收一个字符串,并显示每三个字符的出现情况。

public HashMap<String,Integer> findOccurences(String myStr){
    return null;
}

我需要知道如何使用Mockito为它编写单元测试。

public class TestMySubString {
    @Mock
    private static MySubString mockedMySub;
    private static String str;
    private static HashMap<String,Integer> result;
    @BeforeClass
    public static void setUp(){
        str = "This This"; 
        result.put(" Th", 1);
        result.put("s T",1); 
        result.put("his",2);
        result.put("Thi ",2);
        result.put("is ",1);
        when(mockedMySub.findOccurences(str)).thenReturn(result);
    }
    @Test
    public void testFindOccurences() {
        HashMap<String,Integer> myResult = mockedMySub.findOccurences(str);
        //assertReflectionEquals(result,myResult);
    }

基于这个问题,我使用了assertReflectionEquals,但它仍然返回一个错误。

如果您正在尝试TDD,那么您就错了。您应该^1:

  1. 添加测试
  2. 运行所有测试,看看新测试是否失败
  3. 写一些代码
  4. 运行测试
  5. 重构
  6. 重复

简单明了,这就是你想要的。没有模拟或任何东西:

public class MySubStringTest {
private MySubString mySubString = new MySubString();
@Test
public void testFindOccurences() {
    final Map<String,Integer> myResult = mySubString.findOccurences("This This");
    final Map<String, Integer> expected = new HashMap<String, Integer>() {
        {
            put("Thi", 2);
            put("his", 2);
            put("is ", 1);
            // etc
        }
    };
    assertEquals(expected, myResult);
}
}

在你把这些做好之后,你就完成了上面列表的第一步。运行它并看到它失败(步骤2),然后为您的方法编写一个实现(步骤3),等等

当被测试的方法具有外部依赖关系时,应该使用mocking。例如,您有一个方法public String getWeather(),该方法基于对某个位置的天气的外部web API的调用,返回"It is hot!"或"It is cold!"。然后,你会嘲笑天气API组件,返回它是-12摄氏度,并断言你的方法的结果是"它很冷!"。然后在下一个测试中,模拟外部API组件,返回温度为+38摄氏度,并断言您的方法返回"it’s hot!"。

相关内容

  • 没有找到相关文章

最新更新