2017-09-05 73 views
0

我正在使用Kotlin和JUnit。我有一个父测试抽象类,它包含一些测试实现和一些抽象测试。孩子Kotlin测试课运行所有父母测试

@Test 
abstract fun testThis() 

@Test 
fun testThat() { 
    assert(true) 
} 

在我的孩子班,我实施了testThis()

@Test 
override fun testThis() { 
    assert(1 == 1) 
} 

而在另一个子类中我有另一种实现方式:

@Test 
override fun testThis() { 
    assert(2 == 3) 
} 

然而,当我从运行的IntelliJ所有的测试,我可以看到testThat()被称为两次,一次在每个孩子。

如何阻止这种情况发生?我希望测试只能运行一次,作为其各自类的一部分(在这种情况下,testThat()应该在父类中执行一次)。我的设计有问题吗?

+0

我试图重现这一点,但不能,我只得到一个执行的测试方法,你能包括一个完整的代码示例 – jrtapsell

+0

我纠正了我的问题 – pk1914

回答

0

在我看来你的设计确实存在问题。即使我们可能会消除在父项中调用testThat(),但如果您声明了另一个孩子,那么无论如何您都会有两次相同的测试。我觉得这里的遗产很不起眼。为什么你真的想扩展另一个测试课程? 我有时在测试类上做继承,但在父类中没有实际的测试实现(抽象测试虽然可以)。

+0

我不介意有两次相同的测试运行if他们的实施是不同的。 – pk1914

+0

我纠正了我的问题:每个孩子都有一次执行 – pk1914

+0

这就是继承是如何工作的。如果每个孩子从父母继承测试,它将被调用。所以你应该考虑一些设计变更。也许一些抽象类只有抽象测试,没有实际的测试实现。也许testThat()可以去另一个类。如果它依赖于一些常用的方法(你的孩子也使用),那么另一个班级应该成为另一个孩子。 – pokemzok

1

我会保留你的父类的常用测试工具和设置,并将testThat移动到单独的测试类。

如果您只希望它运行一次,如果您希望它们在两个测试类中单独运行,那么如果您定义一个用于运行所有测试的测试套件,并且只保留它就可以明确跳过它父母测试。