从另一个JUnit测试类运行JUnit测试类

4
我有两个需要测试的类(我们称它们为ClassA和ClassB),每个类都有自己的JUnit测试类(分别为testClassA和testClassB)。
ClassA在正常运行时依赖于ClassB,因此我想确保在运行testClassA之前通过ClassB的测试(否则testClassA的结果将是无意义的)。
最好的方法是什么?在这种情况下,由于要求,如果可能,我需要将其限制在两个指定的测试类中。
如果testClassB的测试没有全部通过,我可以/应该从testClassA抛出异常吗?这将要求testClassB在不可见的情况下运行,并将其成功/失败报告给testClassA,而不是通过JUnit向GUI报告。
我正在使用Eclipse和JUnit 4.8.1
更新:到目前为止,我最好的解决方案是一个带有测试套件的单独文件,如下所示。但这仍然不完全符合我的要求,因为它仍然允许在ClassA失败某些测试时运行ClassB的测试。
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({testClassA.class, testClassBCode.class})
public class testClassB {
}
2个回答

9

您的单元测试不应该依赖于其他测试。

解决方案之一是在ClassA的测试中模拟ClassB,以便独立测试其行为,而不受ClassB测试结果的影响。

我建议您尝试使用mockito


在这种情况下,由于这是一项作业,我不能依赖我的讲师拥有mockito - 本质上,他们只会将我的Java包复制到他们的项目中,在我的类上运行他们的测试,并在他们的类上运行我的测试。(未来参考显然我想知道如何最好地处理这样的问题)。虽然可能不理想,但目前我只是在寻找一种方法(如果存在)来说“//除非ClassB已经通过了它的测试,否则不要运行此测试”,而不必依赖于测试者看到我的注释。 - David Mason
我认为你无法在JUnit中完成这个。您可以通过使用JUnit,TestNG或其他测试框架的OrderedSuite插件来指定测试顺序。 - mgv

0
你应该尝试使用testng框架,它允许进行这种依赖性测试。

2
正如之前的评论所述:这是为了一个作业,JUnit测试是必需的。 - David Mason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接