今天我遇到了非常困难的TDD问题。我需要通过HTTP POSTs与服务器交互。我找到了Apache Commons HttpClient,它可以满足我的需求。与多个合作伙伴进行单元测试
然而,我结束了从Apache的百科全书一堆协作对象的:
public void postMessage(String url, String message) throws Exception {
PostMethod post = new PostMethod(url);
RequestEntity entity = new StringRequestEntity(message,
"text/xml; charset=ISO-8859-1");
post.setRequestEntity(entity);
HttpClient httpclient = new HttpClient();
try {
int result = httpclient.executeMethod(post);
System.out.println("Response status code: " + result);
System.out.println("Response body: ");
System.out.println(post.getResponseBodyAsString());
} finally {
post.releaseConnection();
}
}
我有一个PostMethod
对象,RequestEntity
对象和HttpClient
对象。我觉得在依赖注入方面通过HttpClient
相对比较舒服,但是我对其他合作者做了什么?
我可以创建一堆工厂方法(或工厂类)创建的合作者,但我有点害怕,我会嘲笑太多。
跟进
感谢您的答案!我剩下的问题是这样的方法:
public String postMessage(String url, String message) throws Exception {
PostMethod post = new PostMethod(url);
RequestEntity entity = new StringRequestEntity(message,
"text/xml; charset=ISO-8859-1");
post.setRequestEntity(entity);
HttpClient httpclient = new HttpClient();
httpclient.executeMethod(post);
return post.getResponseBodyAsString();
}
如何正确地验证返回值是post.getResponseBodyAsString()
?我需要模拟post
以及client
吗?