有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在JUnit测试中表示参数值无关紧要?

我正在使用JUnit4、Mockito和Hamcrest进行TDD。我当前的测试如下所示:

FeatureFilter featureFilter = FeatureFilter
    .describeFeature()
    .addFeatureRef("myNewFeature",
        thatIsAvailable()
            .atEndpoint("/resourceWithFeature"))
    .andDisable();

assertThat(featureFilter.isDisabledFor("/resourceWithFeature", null, "myNewFeature"), is(true));
assertThat(featureFilter.isDisabledFor("/irrelevant", null, "myNewFeature"), is(false));
assertThat(featureFilter.isDisabledFor("/resourceWithFeature", null, "self"), is(false));

featureFilter.isDisabledFor的第二个参数应该是用户名(String),我希望测试传达的是,在这种情况下,用户名是不相关的。如果我在测试双精度的上下文中,我可以使用Matcher,比如any(String.class),但这不是一个选项

作为一名开发人员,您将如何传达此断言的意图


共 (1) 个答案

  1. # 1 楼答案

    有一个叫做JUnit Theories的特性@TestTheory对测试有不同的关注:

    • 测试与输入输出相关(在某些输入上,期望某些输出)
    • 理论与算法相关,即它对被调用函数的行为做出断言,接受大量输入参数(代表所有可能的输入参数)。这种理论的输出通常不是固定的,而是计算出来的

    适用于您的问题:

    • 由于未使用的参数不会影响输出,测试无法断言此行为
    • 具有不同数据点的理论至少可以断言,独立于用户的行为适用于所有用户数据点