当前位置: 首页 > 面试题库 >

如何避免在JUnit测试用例中继承?

孟茂学
2023-03-14
问题内容

我在JUnit中有许多测试用例。它们都需要相同的代码才能在其@BeforeClass静态方法中执行。这是代码重复,我正在努力摆脱它。这样做是一种肮脏的方式。JUnit中是否还有其他机制可能会有所帮助?

PS。我写了关于这个主题的博客文章:http : //www.yegor256.com/2015/05/25/unit-test-
scaffolding.html


问题答案:

规则是构成可重用代码(而不是从其继承)的JUnit方法。

参见https://github.com/junit-team/junit/wiki/规则

这是一个愚蠢的示例,但您会明白这一点。

import org.junit.rules.TestRule;
import org.junit.runners.model.Statement;
import org.junit.runner.Description;

public class MyTestRule implements TestRule {
  @Override
  public Statement apply(final Statement statement, Description description) {
    return new Statement() {
      public void evaluate() throws Throwable {
        // Here is BEFORE_CODE
        try {
          statement.evaluate();
        } finally {
          // Here is AFTER_CODE
        }
      }
    };
  }
}

然后,您可以像这样使用TestRule:

import org.junit.Rule;

public class MyTest {
    @Rule
    public MyTestRule myRule = new MyTestRule();
}

然后,将围绕您的每个测试方法执行BEFORE_CODE和AFTER_CODE。

如果每个类只需要运行一次代码,则将TestRule用作@ClassRule:

import org.junit.ClassRule;

public class MyTest {
    @ClassRule
    public static MyTestRule myRule = new MyTestRule();
}

现在,BEFORE_CODEAFTER_CODE将围绕每个测试类的执行。

@Rule字段不是静态的,@
ClassRule
字段是静态的。

@ClassRule也可以在Suite中声明。

请注意,您可以在一个测试类中声明多个规则,这就是在测试套件,测试类和测试方法级别上组成测试生命周期的方式。

规则是您在测试类(静态或非静态)中实例化的对象。您可以根据需要添加构造器参数。

高温超导



 类似资料:
  • 我有以下场景。 一个类,其中我有一个API,其内容如下: 这里我们有一个MyOtherClass,它包含一个执行某些操作的API decodeAndGetName()。它在另一个包中,我无法修改它的代码。 要求 我需要为上面的编写一个jUnit测试。现在我想以某种方式模拟的对象并模拟的返回值。 我无法做到这一点,因为我们有一个新的MyOtherClass(),一旦流到达这一行,它就会创建一个新实例

  • 问题内容: 我已经从JUnit3.8切换到JUnit4.4。我使用ant运行测试,所有测试均成功运行,但测试实用程序类失败,并显示“无可运行方法”错误。我使用的模式是在测试文件夹下包括所有名称为 Test 的类。 我知道,运行程序找不到任何带有@Test属性注释的方法。但是它们不包含此类注释,因为这些类不是测试。令人惊讶的是,当在Eclipse中运行这些测试时,它不会抱怨这些类。 在JUnit3.

  • 我能够测试代码,但代码覆盖率不包括第二个开关情况。 请参考以下代码。 下面是我的测试代码。 由于我已经声明了一个带有测试值的字符串变量,所以我无法涵盖第二个switch语句。我尝试过if else的情况,但同样的问题发生了。我们还有别的办法吗?

  • 我正在学习JUnit测试。我想在JUnit中测试getter和setter,但它不起作用。这是第一节课。 我需要如何更改以测试setter?我如何测试它?

  • 漏测,是指产品的缺陷没有被测试人员发现而遗漏到了用户那里,影响用户使用!

  • 我有一个用Grails 2.3.8编写的大项目。有时,当我使用我的CI部署它时,我收到以下消息: 由于StackOverflow Error,无法完成Web应用程序[/ProjectName##1152]的注释扫描。 可能的根本原因包括 -Xss 设置过低和非法的循环继承依赖关系。正在处理的类层次结构是 [org.bouncycastle.asn1.ASN1EncodableVector- 我已经