我需要以下测试
@runwith(cache, memory)
class CollectionA is -- this is a suite (aka folder)
class Cache { -- this is a sub-suite (aka folder)
@test testCache1() -- this is a method (aka file)
@test testCache2()
@test testCache3()
}
class RAM { -- this is a sub-suite (aka folder)
@test testRAM1()
@test testRAM2()
}
@test testIO()
@test testKeyboard()
@test testMouse()
@test testMonitor()
@test testPower()
@test testBoot()
请注意,只需对Cache和RAM进行分组。层次结构有助于对抗复杂性并运行相关测试,例如必要时单独缓存子系统。我使用@runwith进行分组的问题很快,除了RAM和Cache集合之外的所有单一测试方法都被JUnit忽略。看来你不能在JUnit设计中拥有兄弟文件和文件夹。 the official example of grouping中的评论也提示
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestA.class,
TestA.class
})
public class FeatureTestSuite {
// the class remains empty,
// used only as a holder for the above annotations
// HEY!!! WHAT ABOUT MY @Tests HERE?
}
答案说我是否需要包装每一个测试,例如testPower
进入他们的单身衣服或压扁套房 - 完全摆脱等级。
那么,JUnit是否可以禁止将单个文件(@test方法)与文件夹(@runwith suites)混合使用?为什么?怎么能解决这个问题?可能有@runwith.Suite
的替代方案吗?
答案 0 :(得分:4)
您想要创建的是mixin类型,JUnit运行器不支持。所以,是的,你是对的,不可能开箱即用。
为此,我创建了一个附加组件,可用于为测试创建分层上下文。在我看来,这是JUnit中缺少的功能,我也保持联系以将其包含在JUnit核心中。
附加组件提供了一个HierarchicalContextRunner,它允许使用内部类将测试分组到上下文中。每个上下文都可以包含测试或其他上下文。它还允许@Before,@ After,@ Rule方法和字段,以及其他功能,如标准Runner的@Ignore。 : - )
示例:
@RunWith(HierarchicalContextRunner.class)
public class CollectionA {
public class Cache {
@Test testCache1() {...}
@Test testCache2() {...}
@Test testCache3() {...}
}
public class RAM {
@Test testRAM1() {...}
@Test testRAM2() {...}
}
@Test testIO() {...}
@Test testKeyboard() {...}
@Test Mouse() {...}
@Test testMonitor() {...}
@Test testPower() {...}
@Test testBoot() {...}
}
尝试一下: https://github.com/bechte/junit-hierarchicalcontextrunner/wiki
非常感谢投票和反馈。 :)
答案 1 :(得分:0)
你的设计应该是这样的:
// folder com.myco.project
SuiteX.java
TestA.java
TestB.java
// contents of TestA.java
public class TestA{
@Test
public void someTestInA(){...}
}
// contents of TestB.java
public class TestB{
@Test
public void someTestInB(){...}
}
// contents of SuiteX.java
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestA.class,
TestB.class
})
public class FeatureTestSuite {
// the class remains empty,
// used only as a holder for the above annotations
}
正如我在评论中所述,为每个测试类使用单独的java文件。不要使用内部类。