2011-10-28 72 views
1

我有一个jUnit测试(让我们称之为T1),其中我使用了一个断言。为了使该断言具有任何价值,我需要该断言的验证器是正确的。我可以使用Junit测试作为先决条件另一个Junit测试

对于验证器,我在另一个测试套件中有一个测试(T2)。我能以某种方式让T2成为T1的先决条件吗?

如果这是不可能的,如果T1和T2在同一个套件中,是否可能?

+0

你为什么要这么做? –

+0

它在问题中说得很对。澄清:我有一个过滤器,我有单元测试(T2)在T1我使用该过滤器来验证在T1断言,像这样assertEquals(过滤器(未过滤),实际);所以如果T2没有通过,T1是否通过并不重要,因为它无论如何不会成为有效的测试。 – Rythmic

回答

2

之前,我发现在这个线程:

How can I specify JUnit test dependencies?

它似乎有一个扩展的JUnit,允许JUnit测试之间的依赖关系描述:

https://github.com/junit-team/junit.contrib/tree/master/assumes

+0

我不买它......我觉得它的额外混乱,背景和维护在您的测试。 –

+1

我不确定有什么办法避免维护?我的意思是,如果需要表达的依赖性,应该保留,对吗?...我们只是在谈论注释,所以我没有看到任何高维护开销。 – Anders

+1

我想这个问题是'为什么'这里不是'如何'。什么是单元测试?单元测试应该测试一种方法。即使插入不起作用,我的删除逻辑也可能完全正常。 –

0

你可以用它依靠T2通过解释和评论T1 T2是否也失败了,它应该首先被固定T1被攻克

+0

不错,简单:)但少科技 – Rythmic

1

当没有发生先决条件时,您会考虑跳过单元测试。编码逻辑跳过单元测试是危险的,因为你不会看到是否有任何问题,你的代码甚至没有得到测试覆盖。当基本部分被破坏时,更多的测试失败会比隐藏错误更好。请注意,我们正在讨论单元测试,它应该是独立的,并测试小部分软件。

您可以使用不是生产代码一部分的标准具验证程序,但它必须是一个简单的测试工具,它不会阻止测试运行。最糟糕的是,您的代码中可能存在另一个错误,而未连接到验证器,验证器可能会延迟出现,这是因为测试代码由于前提条件而跳过了关键代码部分。

如果您想要真正进行集成或功能测试,则应该考虑使用甚至比JUnit更多的测试框架。在集成测试中,有时候有意义的是跳过其余的测试,并停止在明确无误的开始之后的几分钟/几小时内滥用集成环境,但在单元测试中,要点是每一段代码都必须得到控制。

当然,您也可以在JUnit中破解前提条件,例如在@ BeforeClass/setUp夹具中放置一个asserion或将'if'叉放入测试中,但它们会欺骗您。

+0

不,我不想考虑跳过单元测试,它更像是一个错误的位置。我可以通过在给定的测试中声明前提条件来完成同样的事情,但是我会运行两次相同的测试,这很好避免。 – Rythmic