将测试套件应用于接口的实现

发布于 2024-12-04 14:02:39 字数 387 浏览 1 评论 0原文

我有一个存在多个实现的接口。 我正在为界面设置一个测试套件。现在我想为每个具体实现者运行套件中的所有测试类。

澄清一下,我有一个像

  • TestSpam.java
  • TestEgg.java
  • TestBacon.java

这样的设置,它们都在测试我的接口 IBreakfast 的不同方面,我将把它们组织在一个名为 TestBreakfast 的套件中。我希望针对以某种方式指定的特定实现运行所有不同的测试,最好是一次并在套件上运行。

在测试用例级别,我认为我可以使用参数化来运行所有实现,但看起来并没有扩展到套件。而且,当使用参数化时,看起来我必须对实现进行硬编码,这感觉非常倒退。

关于如何进行这项工作有什么想法吗?

I have a interface for which there exists several implementations.
I'm setting up a test suite for the interface. Now I want to run all test classes from the suite for each of the concrete implementors.

to clarify, I have a setup like

  • TestSpam.java
  • TestEgg.java
  • TestBacon.java

which are all testing diffrent aspects of my interface IBreakfast, and I'm going to have them organised in a suite called say TestBreakfast. And I want all the diffrent tests to be run for specific implementation specified somehow, preferably once and on/to the suite.

At the testcase level I think I could use parametrise to run for all implementations, but doesn't look like that extends to suites. And also when using parameterise it looks like I would have to hardcode the implementations which feels horribly backwards.

Any idea on how to make this work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哆啦不做梦 2024-12-11 14:02:39

在这种情况下,我反复采用如下模式:

  • 创建一个抽象类来测试接口的预期功能。
    • 此类应声明一个返回接口实例的抽象工厂方法。
    • 所有测试都应使用工厂方法返回的实例。
  • 创建一个或多个扩展此抽象类的类(每个实现一个)。
    • 通过返回适当的具体类来实现工厂方法。
    • 使用此具体测试类还可以测试特定于实现的功能。

In this situation, I've repeatedly settled into a pattern like the following:

  • Create an abstract class which tests the expected functionality for the interface.
    • This class should declare an abstract factory method which returns an instance of the interface.
    • All of your tests should use the instance returned by the factory method.
  • Create one or more classes (one for each implementation) which extend this abstract class.
    • Implement the factory method by returning the appropriate concrete class.
    • Use this concrete test class to also test implementation-specific functionality.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文