【发布时间】:2020-01-23 13:30:48
【问题描述】:
到目前为止,我一直在开发测试以支持我的项目中的某个应用程序。现在我已经启动并运行了一组测试,我需要为另一个类似的应用程序提供支持。这两个应用程序的结果在我的系统中应该是相同的,因为它们都产生相同的操作,但来自不同的上下文。问题是,我正在寻找一种方法来重用我为第一个测试所做的测试,而无需为另一个测试用例复制他们的代码。
我目前在 Java EE 8 下使用 JUnit 4。
我的情况是这样的。给定一个类似下面的测试:
class TestExample {
Context context;
@Before
public void setUp() {
context = new ContextA();
}
@After
public void terminate() {
context.dispose();
}
@Test
public void test1() {
context....
}
}
abstract class Context {
@Override
public void dispose() {
...
}
}
class ContextA extends Context {
}
class ContextB extends Context {
}
我希望能够为 ContextA 做一次测试,然后为 ContextB 做一次测试。
---o---
所以在一段时间后回到这个问题之后,我从这个线程中收集了三个可能的解决方案:
- 参数化
- 测试继承
- 上下文构成
但是,在对真实的测试用例进行了全部尝试之后,我发现它们都不是完美的解决方案。它们确实解决了我在这个问题上提出的问题,但是当一个真实案例出现并且它们之间的上下文开始略有不同时,这些选项就会开始变得复杂和丑陋。
最后,我选择了最简单的解决方案:为每个不同的上下文复制测试源代码。它可以工作,但这样做的问题是,随着时间的推移,维护测试变得越来越难,因为对单个测试的更改必须复制到它的所有副本。
【问题讨论】:
-
也许看看stackoverflow.com/q/56386880/5747415 会有所帮助。
-
感谢您的快速回归。并欢迎投票水平;-)
标签: java unit-testing design-patterns junit