当前位置: 首页 > 知识库问答 >
问题:

通过验收测试驱动多个客户端的服务开发

燕刚毅
2023-03-14

我有一个与验收测试驱动开发(ATDD)相关的问题。我的应用程序是作为一个REST服务开发的,它可能有几个客户端--网站,移动,桌面。ATDD概念说我应该从端到端测试开始每个特性。由于我的服务可能有几个客户端应用程序(端)提供相同的用例,在编写验收测试时,我应该使用什么方法?验收测试应该将对REST服务的直接请求还是客户端应用程序作为输入?还是两者兼而有之?我知道如果我的验收测试是从REST请求开始的,我会省略客户端部分,这肯定是不行的。如果这些从客户端开始,我将对每个客户端重复基本相同的功能测试。我需要找到一个在这些边缘中间的方法。

共有1个答案

缪英锐
2023-03-14

在实践ATDD时,我认为验收测试只是另一个用户界面。话虽如此,我将在业务层的UI下面进行测试。假设我有一个特性:

Given I have an addend of 5
and an augend of 3
When I calculate the sum
Then I should receive 8

在实现此测试时,我的接缝将位于业务层。假设一个Java/Spring类型的应用程序,我的测试如下所示:

@Given("I have an addend of (\\d+)")
public void addend(int addend) { this.addend = addend; }

@Given("I have an augend of (\\d+)")
public void augend(int augend) { this.augend = augend; }

@When("I calculate the sum")
public void calculate() {
    calculator = applicationContext.getBean(ScientificCalculator.class);
    actualResult = calculator.sum(addend, augend);
}

@Then("I should receive (\\d+)")
public void verifyResult(int result) { assertEquals(result, this.actualResult); }

一旦我开发了ScientificCalculator背后的业务逻辑,并且所有测试场景都通过了,我就知道应用程序从功能的角度做了它需要做的事情。因为这完全绕过了UI,所以不需要为每个UI重复测试。UI现在变得完全没有业务规则(这是一件好事),您可以将XML、JSON、HTML等任何您想要的UI放在前面。假设我们使用的是Spring MVC,那么控制器就像下面这样简单:

@GET("calculate/sum/{addend}/{augend}")
public void addSomeNumbers(String addend, String augend) {
    result = calculator.sum(Integer.parseInt(addend), Integer.parseInt(augend));
    // Render the view with the result.
}

布兰登

 类似资料:
  • 我已经被困了几天了,我已经检查了几个答案(这个,这个,这个,这个,这个,这个,这个),但我一直无法解决我的问题。我是SSL的新手,在我的组织中似乎没有其他人这样做过。 背景 目前,我们在零售商网点中有一组终端通过SSL连接到服务器。该连接包括客户端身份验证。我的组织作为CA,并已发布cacert。crt证书,并使用它为服务器和所有客户端终端签署一个证书。终端目前可以与服务器正常工作,但我无法从支持

  • 问题内容: 2个月前关闭。 我正在寻找一种方法或一种方法来使用查看我的网站的任何类型的代理服务器来检测客户端。我正在使用PHP / Apache …最好的方法是什么?任何代理服务器都需要检测,而不是一个或另一个。 编辑 我对匿名代理更感兴趣…因为通过查找可以轻松检测到正常代理。 另一个编辑 尝试这个: 1)转到http://kproxy.com(或任何其他免费的匿名代理站点) 2)访问:http:

  • 问题内容: 我正在使用RMI编写密码系统的原型。 我有一个问题,因为当我启动两个客户端时,它们从OneTimePad类的服务器中的一个对象获得了响应。 因此客户端A获取为客户端b保留的密钥,由于特定的算法,这种情况不会发生。 服务器仅向客户端发送E和N变量(例如在RSA中),因此我无法序列化OneTimePad对象并通过网络发送它(因为它将具有所有密钥)。 如何为每个客户端创建OneTimePad

  • 问题内容: 我为一项服务有不同的软件产品,需要将其部署到一台服务器上。在服务器运行Node.js和Express的同时,客户端通过react进行构建,并通过create- react-app进行构建设置。 当我从服务器为单个应用程序提供服务时,可以通过以下方式完成: 我希望能够从服务器提供多个应用程序。我该怎么办? 我尝试的是为资产连接不同的静态路径,并使用不同的名称分隔客户端,尽管这样做不起作用

  • 问题内容: 如何处理多个客户端以连接到一台服务器?我有这个LogServer.java 和一个嵌入式小程序,其中包含部分代码,例如 现在的问题是,如果我在服务器上运行“ java LogServer”,它将打开应用程序并等待输入流,如果打开站点,它将开始流式传输日志。但是,如果我使用其他计算机/网络再打开一个,则第二个站点不会记录该流。似乎是因为第一个仍绑定到端口5000。 我该如何处理?套接字实