我很惊讶地发现,以下简单的代码示例并不适用于所有Mockito版本> 1.8.5
@RunWith(MockitoJUnitRunner.class)
public class MockitoTest {
@Mock(name = "b2")
private B b2;
@InjectMocks
private A a;
@Test
public void testInjection() throws Exception {
assertNotNull(a.b2); //fails
assertNull(a.b1); //also fails, because unexpectedly b2 mock gets injected here
}
static class A{
private B b1;
private B b2;
}
interface B{}
}
Run Code Online (Sandbox Code Playgroud)
在javadocs(http://docs.mockito.googlecode.com/hg/latest/org/mockito/InjectMocks.html)中有一个引用:
注1:如果你有相同类型(或相同的擦除)的字段,最好用匹配的字段命名所有@Mock注释字段,否则Mockito可能会感到困惑,注入不会发生.
这是否意味着如果我有几个相同类型的字段我不能只模拟其中一个而是应该@Mock
为所有相同类型的字段定义?是否已知限制,是否有任何原因尚未解决?@Mock
按字段名称匹配应该是直截了当的,不是吗?
我正在尝试运行简单的Spring Data Rest Boot应用程序(v1.2.3.RELEASE),只有一个小的修改工作Spring参考示例应用程序(http://spring.io/guides/gs/accessing-mongodb-data-rest /)它无法启动.
在我使用时更具体:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
并只是遵循简单的代码配置:
public class Application {
public static void main(String[] args){
SpringApplication.run(Config.class, args);
}
}
@SpringBootApplication
public class Config {
}
Run Code Online (Sandbox Code Playgroud)
没有别的我在启动时遇到以下错误:
2015-04-20 12:07:32.250 ERROR 5693 --- [main] osboot.SpringApplication:应用程序启动失败
org.springframework.context.ApplicationContextException:无法启动嵌入式容器; 嵌套异常是org.springframework.boot.context.embedded.EmbeddedServletContainerException:无法启动嵌入式Tomcat ...
引起:java.lang.ClassCastException:jug.ua.json.test.Config $$ EnhancerBySpringCGLIB $$ 79797226无法转换为org.springframework.boot.autoconfigure.data中的org.springframework.data.rest.core.config.RepositoryRestConfiguration .rest.SpringBootRepositoryRestMvcConfiguration $$ EnhancerBySpringCGLIB $$ 3a999d99.config()...
但是,以下代码配置工作正常:
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
如果相反我使用:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
单独的Java配置类方法也正常工作......
我做错了什么,因为我无法相信我发现了这么明显的错误?
谢谢你,奥列格