【问题标题】:JUnit integration test with parameterized annotations带有参数化注解的 JUnit 集成测试
【发布时间】:2018-10-16 06:14:33
【问题描述】:

在我的集成测试中,我使用自定义注释来启动我的应用程序的一部分。我绝对需要在我的测试中使用这些注释。因此,典型的集成测试如下所示:

@Test
@MyAnnotation(a = MyEnum.B, b = someOtherConstant)
public void test() {
}

我想做的是为 MyEnum 中的所有枚举运行测试。我考虑过使用参数化测试。但是由于我传递给注释的值必须是常量,我认为这不是一个选项。我还有哪些其他选择?

【问题讨论】:

  • 我不确定你想测试什么。是不是要测试注解,那也许你看看stackoverflow.com/questions/17261501/unit-testing-annotations;或者你想测试一个枚举的所有值,那么我认为参数化测试是正确的选择(枚举值+测试结果)。
  • 是的。我正在尝试为枚举的所有值编写参数化测试。但是,我无法将枚举传递到注释中。

标签: java testing junit annotations integration-testing


【解决方案1】:

我认为这里不需要注释。

一个非常简单的枚举:

package stackoverflow52828976;

public enum MyEnum
{
   A,
   B,
   C;

   public boolean isA()
   {
      return this == A;
   }
}

测试类:

package stackoverflow52828976;

import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

@RunWith( Parameterized.class )
public class MyEnumTest
{

   @Parameterized.Parameters
   public static Collection<Object[]> data()
   {
      final List<Object[]> list = new LinkedList<>();

      list.add(new Object[]{ MyEnum.A, true});
      list.add(new Object[]{ MyEnum.B, false});
      list.add(new Object[]{ MyEnum.C, false});

      return list;
   }


   private final MyEnum e;
   private final boolean testResult;


   public MyEnumTest
         ( final MyEnum    anEnum
         , final boolean   aTestResult
         )
   {
      this.e = anEnum;
      this.testResult = aTestResult;
   }


   @Test
   public void testIsA() throws Exception
   {
      assertEquals(testResult, e.isA());
   }

}

【讨论】:

  • 为什么你认为我可以摆脱我的注释?如果没有这些注释,我的测试将不再有效。注释负责设置所需的基础设施。
  • 但是注解与枚举的测试无关,还是我错了?如果你必须为测试设置一些东西,你仍然可以在测试中使用你的注解,但枚举的测试与此无关。
  • 我想我开始得到你真正想要的东西,我不确定这是否可能。您能否使用注释中的枚举值给出您想在测试中执行的操作的最小示例(SSCCE)。它不是方法参数,我们同意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多