我正在做测试用例,现在不知道如何测试这个函数。你能给我一些想法吗?我试图使用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);
}
基于模拟的测试总是这样工作的:
- 您创建了某个类的某种mock对象
- 您为预期的调用"指示"mock,并指定潜在的返回值
- 您触发了您的"测试中的代码";使用该mock对象作为测试代码的"输入">
- 您检查您的"测试中的代码"是否创建了预期的输出;根据您的mocking框架,您可以验证mock对象是否看到了指定的调用