0

我在网上看到的关于自定义参数供应商的所有示例都有以下内容:

List<PotentialAssignment> list = new ArrayList<PotentialAssignment>();
list.add(PotentialAssignment.forValue("teams", "giants"));
list.add(PotentialAssignment.forValue("teams", "jets"));
list.add(PotentialAssignment.forValue("teams", "niners"));
return list;

现在,我的问题是:PotentialAssignment.forValue(arg1, arg2) 的第一个参数是做什么的?我在网上看到的任何东西都无法解释它的重要性。

谢谢

4

1 回答 1

0

的第一个参数PotentialAssignment.forValue是值的“名称”。如果您的方法通过,则不使用它@Theory,但如果失败,则用于组装错误消息。这是一个例子:

@RunWith(Theories.class)
public class CustomParameterSupplierTest {

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.PARAMETER)
    @ParametersSuppliedBy(FooSupplier.class)
    public @interface Foo {}

    public static class FooSupplier extends ParameterSupplier {
        @Override
        public List<PotentialAssignment> getValueSources(ParameterSignature sig) {
            return Arrays.asList(
                PotentialAssignment.forValue("one", 1),
                PotentialAssignment.forValue("two", 2)
            );
        }
    }

    @Theory
    public void test(@Foo int foo) {
        assertThat(foo, is(1));
    }
}

如果使用 Junit 4.11 执行此测试,您将收到以下错误:

org.junit.experimental.theories.internal.ParameterizedAssertionError: test(two)

顺便说一句,在即将发布的 JUnit 4.12 中,错误报告得到了进一步改进,您将收到以下错误:

org.junit.experimental.theories.internal.ParameterizedAssertionError: test("2" <from two>)
于 2014-05-29T10:25:35.030 回答