我正在尝试练习TDD并进行练习。 有一个现有的服务部署在互联网上的公共RESTful api。 对此api的每个请求都需要一些数据准备,如有效的请求字符串构造,一些加密,一些正文消息格式化等。 我想使用TDD为这项服务编写通用客户端。
我知道它并不像StringCalculator kata,需要一些不同的方法。
我不知道如何开始。我想在不使用真实服务的情况下测试它,因此需要一些假的impl。编写一些假实现,将它部署在localhost并从我的测试中调用它会更好吗?或者也许嘲笑一个负责发送http请求的类?
我希望我的客户端使用如下:
public class ServiceClientTest {
@Test
public void testSendStoreRequest() {
ServiceClient client = new ServiceClient("app_key", "private_key")
ClientResponse response = client.sendStoreRequest(StorageType.NORMAL, "string_to_store");
assertEquals("200", response.getStatus());
}
}
你能指点我如何开始这个吗? 我应该自下而上并编写所有组件(用于创建请求字符串,加密等),然后在ServiceClient中使用它们,或者我应该从ServiceClient测试和实现开始自上而下和模拟?
答案 0 :(得分:5)
First of all,don't mock external APIs。为什么? Cos you don't own them
您的问题的理想解决方案似乎就是您开始描述的内容。您应该在项目中创建一个您拥有的界面,该界面将代表外部服务。
public interface CalculatorService {
int add(int a, int b);
}
这将是您的 border 进行测试。所有UNIT和ACCEPTANCE测试都应针对CalculatorService
的模拟或存根运行。他们会很快。
您可以这样做,因为您定义合同(该接口实际意味着什么)。
稍后,您将拥有一个实现远程HTTP休息服务的实现:
class RemoteRestCalculator implements CalculatorService {
public int add(int a, int b) {
// call the remote service in here
}
}
您需要测试此合同(边框)。因此,您只需为RemoteRestCalculator
编写集成测试。您还可以使用RemoteRestCalculator
运行应用程序的几个端到端测试来测试接线等。
现在,回答你的问题,如何测试RemoteRestCalculator
?
RemoteRestCalculator
的测试。 RemoteRestCalculator
的测试。 答案 1 :(得分:0)
我想这取决于......
如果你认为你可能会将假冒的impl用于其他测试等,那么这似乎是要走的路,如果不是只是嘲笑它。
我会从模拟开始,看看它是如何发展的。
答案 2 :(得分:0)
Or maybe mock a class responsible for sending http request?
我认为这是要走的路。毕竟,ServiceClient
负责的是:将请求转发给实际服务。
答案 3 :(得分:0)
这可能会有所帮助
https://hackernoon.com/spring-boot-rest-tdd-from-scratch-15f13ed799e0
在本文中,您可以通过Spring Boot