Android测试 - 如何测试此功能?

时间:2016-05-24 15:31:53

标签: java android testing mockito

我正在做测试用例,而我现在还不知道如何测试这个功能。你能给我一些想法吗?我试图使用Mockito,但我一直变得无效。我很感激你的帮助。

这是我要测试的功能。

public static Date optDate(JSONObject json, String key) {
    if(!json.isNull(key)) {
        try {
            DateTime dt = JSONUtils.dateFormatter.withZoneUTC().parseDateTime(json.optString(key));
            Date date = dt.toDate();
            return date;
        } catch(Exception e) {
        }
    }
    return null;
}

我正在以这种方式测试它。

    @RunWith(MockitoJUnitRunner.class)
public class JSONUtilsTest {
    static String dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
    static DateTimeFormatter dateFormatter = DateTimeFormat.forPattern(dateFormat);
    DateTime dt = JSONUtilsTest.dateFormatter.withZoneUTC().parseDateTime("2011-11-02T02:50:12.208Z");
    Date date = dt.toDate();

    @Mock
    JSONObject JSONMock = Mockito.mock(JSONObject.class);
    JSONUtils mJSONUtils = Mockito.mock(JSONUtils.class);


    @Before
    public void setup() {
        doReturn(date).when(mJSONUtils).optDate(JSONMock,"possessionDate");
    }


    @Test
    public void optDateShouldReturnValueOnValidString() {
            Date result = JSONUtils.optDate(JSONMock, "possessionDate");
            Assert.assertEquals("2011-11-02",result);

    }


}

*****************************编辑1 **************** *********

试图找到一种正确的方法来测试这种方法。我做到了。

@RunWith(MockitoJUnitRunner.class)
public class JSONUtilsTest {

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    Date today = new Date();
    String todayString = dateFormat.format(today);

    @Mock
    JSONObject JSONMock = Mockito.mock(JSONObject.class);

    @Before
    public void setup() {
        when(JSONUtils.optString(JSONMock, "possessionDate")).thenReturn(todayString);

    }

    @Test
    public void optDateShouldReturnValueOnValidString() {
        Date result = JSONUtils.optDate(JSONMock, "possessionDate");
        Assert.assertEquals(today,result);
    }

1 个答案:

答案 0 :(得分:0)

基于模拟的测试总是这样:

  1. 您创建某种类的模拟对象
  2. 您“指示”模拟预期的调用并指定潜在的返回值
  3. 您触发“正在测试的代码”;使用该模拟对象作为测试代码的“输入”
  4. 您检查您的“测试代码”是否创建了预期的输出;根据您的模拟框架,验证您的模拟对象是否看到了指定的调用。