我正在使用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理论的功能。@Test
和Theory
对测试有不同的关注:
- 一个测试与输入输出相关(在某些输入上,期望某些输出)
- 理论与算法相关,即它对所谓函数的行为做出断言,接受大量的输入参数(代表了所有可能的输入参数。通常,这种理论的输出通常不是固定而是计算出来的。
应用于您的问题:
- 由于未使用的参数不会影响输出,因此测试不能断言此行为。
- 具有不同数据点的理论至少可以断言,与用户无关的行为符合所有用户数据点。