如何在 JUnit 测试中指出参数值无关紧要?
How to notate that the parameter value doesn't matter in a JUnit test?
我正在使用 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 Theories。 @Test
和 Theory
对测试的关注点不同:
- a 测试与输入-输出相关(在一些输入上,期望一些输出)
- a 理论与算法相关,即它对被调用函数的行为做出断言,接受大量输入参数(代表所有可能的输入参数。通常这种理论的输出不是固定的,而是计算。
应用于您的问题:
- 由于未使用的参数不会影响输出,因此测试无法断言此行为。
- 具有不同数据点的理论至少可以断言独立于用户的行为适用于所有用户数据点。
我正在使用 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 Theories。 @Test
和 Theory
对测试的关注点不同:
- a 测试与输入-输出相关(在一些输入上,期望一些输出)
- a 理论与算法相关,即它对被调用函数的行为做出断言,接受大量输入参数(代表所有可能的输入参数。通常这种理论的输出不是固定的,而是计算。
应用于您的问题:
- 由于未使用的参数不会影响输出,因此测试无法断言此行为。
- 具有不同数据点的理论至少可以断言独立于用户的行为适用于所有用户数据点。