我正在构建一个查询Web服务的应用程序.数据库中的数据会随着时间的推移而变化.如何为此类应用程序构建单元测试?
Web服务发送回xml或无搜索结果html页面.我无法真正改变网络服务.我的应用程序基本上使用HTTPURLConnection查询Web服务并将响应作为String获取.
希望有助于提供更多细节.
使用您可以模拟的代理提取Web服务.让您的模拟Web服务返回表示正常数据和极端情况的各种值.还模拟从Web服务获取异常.确保您的代码在这些条件下工作,并且您可以合理地确定它将适用于Web服务提供的任何值.
看看jMock for Java mocking.
严格来说,单元测试只能测试具有确定性行为的单元.
连接到外部Web服务器的测试是集成测试.
解决方案是模拟HTTPURLConnection - 也就是说,在单元测试中创建一个类,该类派生自HTTPURLConnection类,并返回硬编码或可参数化的值.编辑:注意这可以在没有任何模拟框架的情况下完成.
查询Web服务器的类不应实例化HTTPURLConnection,而是通过参数接收它.在单元测试中,您创建HTTPURLConnectionMock,并将其传递给询问Web服务器的类,该服务器将使用它,因为它使用真正的HTTPURLConnection.在生产代码中,您创建一个真正的HTTPURLConnection并将其传递给该类.
您还可以使HTTPURLConnectionMock能够抛出IOException,以测试错误情况.只是有一个方法告诉它不要返回结果,而是在下一个请求时返回异常.