我编写了一个Java类(MyRestClient
),它需要访问第三方RESTful API并使用从其服务器返回的HTTP响应进行一些处理。我现在正在尝试在JUnit
和第三方API之间编写一系列成功的集成测试(使用MyRestClient
作为基础testng lib),以确保此类在各种情况下正常运行:
该列表中的第4项(“无网络连接”)是我目前所坚持的。我正在使用Jersey
来执行我的实际REST调用,但是Jersey本身只是基于java.net.*
。如果可能的话,我想在我的shouldThrowExceptionOnBadNetworkConnection()
测试方法执行时“打破”Jersey / Java发起网络连接的能力,然后将其“打开”,以便下一个测试方法能够表现出来通常
我一直在查看Charles Proxy似乎只是这样做,但似乎没有用于在运行时管理它的Java库。
所以我问:如何针对特定的集成测试“关闭”Java网络?提前致谢。
答案 0 :(得分:0)
通过声明一个返回URL的受保护方法使MyRestClient可测试,并让它在私有字段中使用它。
在你的JUnit测试中,你是一个覆盖该方法的匿名类,它会返回垃圾:
MyRestClient willFail = new MyRestClient() {
protected String getUrl() {
return "http://not.a.real.address";
}
}
还有一些模拟库可以做类似的事情