【问题标题】:Exclude some JUnit tests from automated test suite从自动化测试套件中排除一些 JUnit 测试
【发布时间】:2013-09-06 08:17:54
【问题描述】:

在编写与外部资源交互的代码时(例如使用 Web 服务或其他网络操作),我经常对类进行结构化,以便也可以使用文件或其他一些输入方法对其进行“存根”。因此,我最终使用存根实现来测试系统的其他部分,然后进行一两个专门测试调用 Web 服务的测试。

问题是我不想从 Jenkins 或当我为我的项目运行所有测试时调用这些外部服务(例如“gradle test”)。某些服务有副作用,或者可能并非所有开发人员都可以访问。

现在我只是取消注释然后重新注释这些特定测试方法上的 @Test 注释以启用和禁用它们。启用它,手动运行它来检查它,然后记得再次注释掉它。

// Uncomment to test external service manually
//@Test
public void testSomethingExternal() {

有没有更好的方法?

编辑: 对于手动单元测试,我使用 Eclipse 并且能够只需右键单击测试方法并执行 Run As -> JUnit 测试。但如果没有(未注释的)注释,这将不起作用。

【问题讨论】:

  • 目前尚不清楚您是想要一个可以来回切换的单元测试的自动化“配置文件”,还是只是在开发过程中手动切换它们的更简洁的方式。
  • @chrylis 我最初试图做的是运行一个单独的测试。但是,为这些类型的测试制作单独的配置文件的想法可能是更好的方法。虽然我仍然希望能够单独运行一些测试(例如,在有副作用的情况下 - 我试图避免但有时是不可避免的)。

标签: java unit-testing junit


【解决方案1】:

我建议使用 junit 类别。有关详细信息,请参阅此博客:https://community.oracle.com/blogs/johnsmart/2010/04/25/grouping-tests-using-junit-categories-0

基本上,您可以将一些测试注释为特殊类别,然后您可以设置两个测试套件:一个运行该类别的测试,另一个忽略该类别中的测试(但运行其他所有测试)

@Category(IntegrationTests.class)
public class AccountIntegrationTest {

  @Test
  public void thisTestWillTakeSomeTime() {
    ...
   }

  @Test
  public void thisTestWillTakeEvenLonger() {
     ....
  }

}

您甚至可以注释单个测试”

public class AccountTest {

   @Test
   @Category(IntegrationTests.class)
   public void thisTestWillTakeSomeTime() {
     ...
    }

每当我看到手动打开或关闭某些东西时,我都会感到畏缩。

【讨论】:

  • 谢谢 - 这听起来是个好主意。不确定这如何与 Gradle 或 Eclipse 交互,需要进一步检查。
【解决方案2】:

据我所知,您使用 gradle 和 API for JUnit 说注释 @Ignore 禁用测试。我将添加 gradle 任务,该任务将为这些测试添加 @Ignore

【讨论】:

    【解决方案3】:

    如果您只是想禁用尚未编写的功能的测试或临时手动禁用某些测试,您可以使用@Ignore;测试将被跳过,但仍会在报告中注明。

    如果您想要 Spring Profiles 之类的东西,您可以在其中定义运行测试的规则集,您应该将测试拆分为单独的测试用例或使用 Filter

    【讨论】:

    • 有趣。请参阅上面的编辑 - 也许我可以制作一个过滤器来检测我何时在 Eclipse 中运行单个测试并适当地(取消)过滤该测试方法。 (没想到这就像 Spring 配置文件一样,但是是的,它非常相似。)
    【解决方案4】:

    您可以使用@Ignore 注解来防止它们在测试期间自动运行。如果需要,您可以手动触发此类 Ignored 测试。

        @Test
        public void wantedTest() {
            return checkMyFunction(10);
        }
    
        @Ignore
        @Test
        public void unwantedTest() {
            return checkMyFunction(11);
        }
    

    在上面的例子中,unwantedTest 将被排除在外。

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 2011-05-10
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 2022-08-20
      相关资源
      最近更新 更多