我目前正在开发一个将文件上传到Web服务的应用程序(使用spring resttemplate)。此上传功能返回一个id,可用于稍后下载上传的文件。
我希望测试涵盖这个场景(我不是在讨论单元测试 - 可能是集成或功能测试,无论哪个合适)。
我想要做的是下载测试用例取决于上传测试的结果(因为id将来自上传功能) - 这将根据实际的Web服务进行测试,以确认是否上传和下载功能正常工作。
我不确定我想做的这种方法是否正确,所以如果有人能提出一个好的方法来实现它,我们将不胜感激。
提前致谢!
答案 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
是您的应用程序的包装器
它做你想做的事。我建议您阅读“以测试为导向的面向对象的软件增长”。