我有一个方法需要返回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);
}
基于此question我使用了assertReflectionEquals但它仍然返回错误。
答案 0 :(得分:3)
如果你正在尝试做TDD,那你就错了。你应该^1:
简单明了,这就是你想要的。没有嘲笑或任何东西:
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);
}
}
在您完成此操作后,您已完成上述列表中的第1步。运行它并看到它失败(步骤2),然后为您的方法编写实现(步骤3)等。
当您测试的方法具有外部依赖性时,您应该使用模拟。例如,您有一个方法public String getWeather()
,它返回“它很热!”或者“很冷!”,基于对某个地方天气的外部网络API的调用。然后你嘲笑天气API组件返回它是-12摄氏度,你断言你的方法的结果是“它很冷!”。然后在下一个测试中,您模拟外部API组件以返回它是+38摄氏度并断言您的方法返回“它很热!”。