java 如何测试后面带有True或False的多个testValues

f3temu5u  于 2023-03-21  发布在  Java
关注(0)|答案(2)|浏览(124)

我希望方法public void testinputBiggerThan()在方法public static Collection testValues()中使用所有testvalue执行。
所以我想给予多个参数一个true或false的条件,然后在AssertTrue中进行评估

@RunWith(Parameterized.class)
public class ParamaterizedTest {

  @Parameterized.Parameters
  public static Collection testValues() {
    return Arrays.asList(new Object[][] {
        { 18.5, true },
        { 16.5, false },
        { 19.5, true },
        { 15.5, false },
        { 20.5, true }
    });
  }

  @Test
  public void testinputBiggerThanExpected(){
    Double expected = 17.5;
    AssertTrue(expected < //how do I get here all the values testValues() and evaluated whether this is the case 18.5 is (true because 18.5 is bigger than 17.5)& true in testValues()=true, etc );

  }
}
xuo3flqw

xuo3flqw1#

您需要提供一个构造函数,该构造函数具有testValues()方法返回的正确数量和类型的参数,然后将这些值作为字段赋值,并在测试中使用这些字段。
对于@Parameterized.Parameters方法返回的每组值,以及每个@Test注解的方法,Parameterized测试运行器将创建一个新的测试类示例,并运行测试方法(这意味着如果您有5组值和3个测试方法,它将创建5 * 3个测试类示例)。
因此,将您的代码更改为:

@RunWith(Parameterized.class)
public class ParamaterizedTest {

  private final double testDouble;
  private final boolean expectedResult;

  public ParameterizedTest(double testDouble, boolean expectedResult) {
    this.testDouble = testDouble;
    this.expectedResult = expectedResult;
  }

  @Parameterized.Parameters
  public static Collection testValues() {
    return Arrays.asList(new Object[][] {
        { 18.5, true },
        { 16.5, false },
        { 19.5, true },
        { 15.5, false },
        { 20.5, true }
    });
  }

  @Test
  public void testinputBiggerThanExpected(){
    Double expected = 17.5;
    assertEquals(expectedResult, expected < testDouble);
  }
}

另请参阅有关Parameterized tests的JUnit 4文档。
顺便说一句,您目前使用的是JUnit 4,而在JUnit 5中使用参数化测试的方式既简单又强大。我建议您改用这种方式。有关更多信息,请参见JUnit 5用户指南的参数化测试一节。

j9per5c4

j9per5c42#

你可以先迁移到JUnit5。你的测试方法testinputBiggerThanExpected应该使用@ParameterizedTest annotation而不是@Test。阅读link

public class ParamaterizedTest {

  public static Collection testValues() {
    return Arrays.asList(new Object[][] {
        { 18.5, true },
        { 16.5, false },
        { 19.5, true },
        { 15.5, false },
        { 20.5, true }
    });
  }

  @ParameterizedTest
  @MethodSource("testValues")
  public void testinputBiggerThanExpected(float floatValue, boolean booleanValue){
    Double expected = 17.5;
    assertTrue(expected < floatValue);
  }
}

或者更简单的方法:

public class ParamaterizedTest {

  @ParameterizedTest
  @ValueSource(floats = { 18.5, 16.5, 19.5, 15.5, 20.5 })
  public void testinputBiggerThanExpected(float floatValue) {
    Double expected = 17.5;
    assertTrue(expected < floatValue);
  }
}

相关问题