作者qrtt1 (有些事,有时候。。。)
看板java
标题Re: [问题] 与网路状态相关的Test Case该怎麽写
时间Tue Jun 5 12:28:17 2012
※ 引述《MIDlet (遥遥无期)》之铭言:
: 小弟正在学习写Test Case
: 本来写得很开心
: 结果卡关了
: 有个method内容类似下面的程式码
: public String connect(String userId) {
: HttpClient client = new DefaultHttpClient();
: HttpGet get = new HttpGet(url + "?userId=" + userId);
: ResponseHandler<String> handler = new BasicResponseHandler();
: try {
: String responseBody = client.execute(get, handler);
: return "0000";
: } catch (Exception e) {
: return "1000";
: } finally {
: client.getConnectionManager().shutdown();
: }
: }
: 一般method传入参数然後检查回传值我知道怎麽写
: 但像这种method
: 回传值会取决於网路连线成不成功
: 该如何写Test Case并进行测试呢?
简单的就自己换掉 result
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
public class MyHttpClient {
public String connect(String url, String userId) {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url + "?userId=" + userId);
ResponseHandler<String> handler = new BasicResponseHandler();
try {
String responseBody = client.execute(get, handler);
return "0000";
} catch (Exception e) {
return "1000";
} finally {
client.getConnectionManager().shutdown();
}
}
}
==============================================================
import static org.junit.Assert.*;
import org.junit.Test;
public class MyHttpClientTest {
@Test
public void testOkCase() {
// arrange mock
MyHttpClient okResultClient = new MyHttpClient() {
@Override
public String connect(String url, String userId) {
return "0000";
}
};
// act
// assert
}
@Test
public void testBadCase() {
// arrange mock
MyHttpClient badResultClient = new MyHttpClient() {
@Override
public String connect(String url, String userId) {
return "1000";
}
};
// act
// assert
}
}
============================================================
要再复杂一点的就要用 mock library 呗。
http://code.google.com/p/mockito/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.72.110.37
1F:推 MIDlet:我去研究看看 06/05 12:59
2F:推 MIDlet:感谢qrtt1,虽然最後没有用这个方法,不过提醒了我HttpClient 06/06 12:33
3F:→ MIDlet:应该设计成MyHttpClient的一个private field 06/06 12:38
4F:→ MIDlet:实作一个假的HttpClient用setter指定给MyHttpClient 06/06 12:41
5F:→ MIDlet:就可以不受网路影响来测试了 06/06 12:43