В Java 6 есть ошибка, связанная с этим.
Этот код будет выдавать различные ошибки, такие как "не удается найти символ..."
assertThat(achievements, hasItem(isA(TestAchievement.class)));
Обходной путь для этого состоит в том, чтобы объявить сопоставитель как переменную, а затем сослаться на эту переменную. Важно отметить, что тип переменной, в частности раздел дженериков, очень важен для того, чтобы это работало.
Matcher<Iterable<? super TestAchievement>> matcher = hasItem(isA(TestAchievement.class));
assertThat(achievements, matcher);
Интересно, что если вы используете instanceOf()
вместо isA()
, вы снова столкнетесь с проблемой. (хотя, если вы проигнорируете предупреждения, это все равно может сработать для вас.) Расширение предыдущего исправления, которое вы можете использовать:
Matcher<TestAchievement> itemMatcher = Matchers.instanceOf(TestAchievement.class);
Matcher<Iterable<? super TestAchievement>> matcher = hasItem(itemMatcher);
assertThat(achievements, matcher);
person
Mike Rylander
schedule
23.12.2013