【发布时间】:2011-08-28 12:59:19
【问题描述】:
我正在使用 twitter4j 并开发 StatusListener 类,需要一种方法来创建一个 模拟 Status 对象,以便我可以测试我的课程。我不想 在我开发时实际连接到 API。
有没有办法从 json 字符串创建一个状态对象?我只是想 从 Twitter 下载一个状态,将其保存为字符串,然后 然后在我开发时重用它来创建 Status 对象。
谁能告诉我怎么做?
【问题讨论】:
我正在使用 twitter4j 并开发 StatusListener 类,需要一种方法来创建一个 模拟 Status 对象,以便我可以测试我的课程。我不想 在我开发时实际连接到 API。
有没有办法从 json 字符串创建一个状态对象?我只是想 从 Twitter 下载一个状态,将其保存为字符串,然后 然后在我开发时重用它来创建 Status 对象。
谁能告诉我怎么做?
【问题讨论】:
一种选择是使用模拟测试框架(如Mockito)实际创建模拟Status 对象。
只要您确切知道Status 对象应该返回什么,那么这将是一种不需要任何连接到 Twitter API 的方法。
假设我们有一个YourClass.extractStatusText 方法,该方法将从Status 对象中提取状态文本并将其返回。
使用 Mockito,我们可以做到以下几点:
import static org.mockito.Mockito.mock;
// ...
public void testCode() {
// given - we'll mock a Status which returns a canned result:
Status status = mock(Status.class);
when(status.getText()).thenReturn("It's a nice summer day!");
// when - exercise your class
String statusText = YourClass.extractStatusText(status);
// then - check that the status text is returned
assertEquals("It's a nice summer day!", statusText);
}
【讨论】:
让连接和下载一个状态,然后通过序列化保存它
http://java.sun.com/developer/technicalArticles/Programming/serialization/
http://twitter4j.org/en/javadoc/twitter4j/Status.html
http://twitter4j.org/en/javadoc/twitter4j/StatusJSONImpl.html
根据constructor documentation,使用StatusJSONImpl 类和twitter4j.internal.org.json.JSONObject 提供构造函数来创建自己的对象
【讨论】:
使用DataObjectFactory.createStatus(String rawJSON) 方法。
详情请见http://twitter4j.org/en/javadoc/twitter4j/json/DataObjectFactory.html。
【讨论】:
TwitterObjectFactory.createStatus(String rawJson);
注意这是弃用:
Status status = DataObjectFactory.createStatus();
改为使用:
Status status = TwitterObjectFactory.createStatus(String rawJson);
【讨论】: