创建依赖于另一个测试用例的测试

时间:2015-10-27 04:43:01

标签: spring unit-testing testing tdd integration-testing

我目前正在开发一个将文件上传到Web服务的应用程序(使用spring resttemplate)。此上传功能返回一个id,可用于稍后下载上传的文件。

我希望测试涵盖这个场景(我不是在讨论单元测试 - 可能是集成或功能测试,无论哪个合适)。

我想要做的是下载测试用例取决于上传测试的结果(因为id将来自上传功能) - 这将根据实际的Web服务进行测试,以确认是否上传和下载功能正常工作。

我不确定我想做的这种方法是否正确,所以如果有人能提出一个好的方法来实现它,我们将不胜感激。

提前致谢!

3 个答案:

答案 0 :(得分:0)

由于单位级别已涵盖此上传/下载功能

  

我希望测试涵盖这个场景(我不是在谈论单元测试 - 可能是集成或功能测试,无论哪个合适)。

我知道Test chaining被认为是有害的

  

下载测试用例将取决于上传测试的结果(因为id将来自上传功能)

并且可能导致测试之间出现大量重叠,因此对一个测试的更改可能会向外级联并导致各处出现故障。此外,测试应具有原子性(隔离)。但如果您的案例中的权衡取决于您,我的建议是使用它。

您可以看到的是一个正确的Test Fixture策略。其他Fixture Setup模式可以帮助您解决此问题。

答案 1 :(得分:0)

听起来像是接受测试'是需要的。这基本上是子系统对所需特征的集成测试。 看看Cucumber是一个很容易入门的简单框架。

您可以在此处定义步骤 鉴于: 什么时候: 然后:

然后您可以将该功能作为一个整体进行测试。

答案 2 :(得分:0)

即使在e2e测试中,也必须模拟您的应用程序的外部服务(您无法控制)。

这意味着您上传文件的服务应该伪造。只需设置虚假的http服务器,假装是真正的服务。

使用这样的虚假服务,您可以为每个测试设置它的行为,例如,您可以准备要使用给定ID下载的文件。

伪代码:

// given
file = File(id, content);
fakeFileService.addFile(file);

// when
applicationRunner.downloadFile(file.id());

// then
assertThatFileWasDownloaded(file);

这是一个检查应用程序是否可以下载给定文件的测试。

  • File class是您的应用程序中的某个域对象,而不是系统 文件!
  • fakeFileService是控制虚拟文件服务的实例。
  • applicationRunner是您的应用程序的包装器 它做你想做的事。

我建议您阅读“以测试为导向的面向对象的软件增长”。