org.hamcrest.Matcher.describeMismatch我遇到了NoSuchMethodError的常见问题。这很奇怪,因为当我尝试在一次测试中模拟一个带有多个参数的方法时,它才会抛出。我想我的描述可能不清楚,所以我会通过例子来说明。这是我的模仿:
private void mockParameterListOfTerminalGroup(TerminalGroup terminalGroup, List<Parameter> parameters) {
Matcher<ParameterFilter> matcher = Matchers.<ParameterFilter> hasProperty("bean", hasProperty("scopeId", equalTo(terminalGroup.getId())));
when(parameterDAO.getByExample(argThat(matcher))).thenReturn(parameters);
}
当它在测试中被调用一次时,它工作得很清楚,但是当我尝试为不同的参数多次模拟它时会抛出NoSuchMethodError。
依赖项顺序正确:
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.10.19</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>hamcrest-core</artifactId>
<groupId>org.hamcrest</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
有趣的是,当我使用测试构建整个项目时,此测试通过,但是当我将其作为单个junit测试运行时,它会失败。