如何说明参数值在 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),但这不是这里的选择。

作为开发人员,您将如何交流此断言的意图?

有一个称为junit理论的功能。@TestTheory对测试有不同的关注:

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

应用于您的问题:

  • 由于未使用的参数不会影响输出,因此测试不能断言此行为。
  • 具有不同数据点的理论至少可以断言,与用户无关的行为符合所有用户数据点。

最新更新