【问题标题】:Same tests for different langages不同语言的相同测试
【发布时间】:2015-10-12 07:44:33
【问题描述】:

我有一个 C# api。现在我还需要它的 Java 实现。然后维护这两个api。

为了确保两种实现不会随着时间的推移而出现分歧,我想在它们之间共享相同的测试(不一定是单元测试,但至少是端到端测试)。

到目前为止,我可以想到两种不同的方法:

  • 将两个实现都放在一个 rest api 后面,并通过它进行测试 api。优点是我可以对两者进行完全相同的测试 实施。缺点是放的有点重 地方。
  • 使用行为驱动开发测试(Cucumber 用于 Java,SpecFlow 用于 C#),并使用相同的功能文件 对于不同的实现。缺点是我必须 提供每种语言的步骤实现,所以有 测试实际上存在细微差别的风险。

如果有任何想法以更令人满意的方式处理它,我将不胜感激。

【问题讨论】:

  • 只是好奇 - 为什么有两个实现? .Net 现在是开源的,所有与基础设施相关的问题都可以通过 containerization 解决。同时,如果这些 API 将用作服务......语言无关紧要......?
  • 这些 API 不会用作服务。它是某种解析库,客户端在 ram 中使用它。问题是我们现在希望能够从 Java 程序中进行这种解析

标签: api unit-testing testing automated-tests integration-testing


【解决方案1】:

恕我直言,这两个 API 的 Facade 是更好的选择。它允许您在单元测试(集成、系统、E2E、UAT)之上重用相同的测试套件。

缺点是放起来有点重。

我怀疑拥有双 BDD 框架会更省力。您的语言绑定必须不同(例如 *.feature.cs.feature.java 文件)。您必须部署的单元测试框架(NUnit、MSTest、JUnit、TestNG 等)将需要单独的CI 服务器处理。

同时为所有测试只使用一种实现将更加可行。使用与SUT 相同的语言进行测试不是强制性的。无论语言如何,所有测试都将针对两种 API 要求同步。

【讨论】:

  • 1+ 用于使用外观模式
猜你喜欢
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 2013-12-25
相关资源
最近更新 更多