如果该类是由Test-Suite发起的,是否有办法知道JUnit
4测试类?我有要在所有测试之前运行的全局性内容(关于内存中的数据库),因此我想在测试服中进行。但是,我仍然希望能够在没有Test-
Suit的情况下一次启动一个测试,因此我需要知道是否需要在测试的@Before部分中初始化全局对象……有人知道吗?如果它是可能的 ?
有几种方法可以实现此目的。最简单,最简单的方法是在套件的开头和结尾运行一个“测试”,以建立数据库,然后设置一个全局标志。在@Before和@After测试中,请检查此标志,并在必要时进行设置/拆卸。
@RunWith(Suite.class)
@SuiteClasses({SetupTest.class, RealTest.class, TeardownTest.class});
这是最简单的解决方案,但不是很好,因此更简洁的解决方案是使用TestRule。看一下扩展ExternalResource。这实现了围绕您的测试方法的逻辑前后。这将允许您排除@Before和@After方法,以便在各处重用相同的代码。
然后,对于您的套件,您还需要实现之前/之后的逻辑。不幸的是,用@RunWith(Suite.class)注释的类实际上并未实例化,因此您不能使用该类的构造函数,但是可以扩展Suite。根据运行方式的不同,您将需要使用@RunWith作为示例来实现一个构造函数:
public class MySuite extends Suite {
/**
* Called reflectively on classes annotated with <code>@RunWith(Suite.class)</code>
*
* @param klass the root class
* @param builder builds runners for classes in the suite
* @throws InitializationError
*/
public MySuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
this(builder, klass, getAnnotatedClasses(klass));
// put your global setup here
// set global variable
}
}
然后运行您的测试套件
@RunWith(MySuite.class)
有几种在不同情况下使用的构造函数,请查看每个构造函数旁边的注释以获取详细信息。您仍然需要使用全局变量,以便您的规则不会重新执行设置代码。如果您只想执行设置代码,则执行上面的命令比较困难,但是可以做到。让我知道您是否需要它:-)
如果您想要更大的灵活性(例如仅针对特定方法执行安装代码),请参阅我的答案如何在套件中定义JUnit方法规则?。
我试图用TestNG.xml运行我的TestNG套件。我的套件中总共有四个类,但我只能用所有方法一次运行两个类。假设我在每个类中有3个方法,那么在TestNG套件中,如果我只添加两个类,TestNG.xml文件将用6个方法运行我的两个测试。现在,如果我尝试在testng.xml文件中添加第三个类,它将只运行每个类的第一个方法。这意味着现在它只运行3个方法(每个类一个)。我在我的项目下创建了一个源文
问题内容: 在JUnit4中可以吗? 在JUnit3中,我将执行以下操作: 问题答案: takari-cpsuite(最初由Johannes Link 开发)提供了一个适合您需求的classpath- suite。它允许通过正则表达式对Classpath中的类进行过滤,例如:
问题内容: 该命令仅覆盖一个目录中的文件。 我想要整个项目,这意味着测试应覆盖dir中的所有文件以及该dir下的所有千岁树dir 。 这样做的命令是什么? 问题答案: 这应该在当前目录及其所有子目录中运行所有测试: 这应该针对给定的特定目录运行所有测试: 这应该以前缀为的导入路径运行所有测试: 这应该运行所有带有前缀的测试导入路径: 这应该在$ GOPATH中运行所有测试:
有4个类包含测试< code>TestClass1、TestClasss2、TestClass3、TestClass4。您需要创建2个测试套件,每个套件将包含2个类,并使用< code>Maven surefire插件并行运行它们。 我创建了两个包含以下内容的xml文件: 和 也添加到: 接下来,我用命令< code>mvn clean test运行项目,项目将要运行,但是测试没有开始。我哪里错了
执行testng xml时,它在套件中只执行1个测试 基本测试- 登录测试-