Java Jukito提供程序模拟返回null
我在jukito单元测试中遇到了一些问题。我似乎不能嘲笑提供者。示例:Java Jukito提供程序模拟返回null,java,jukito,Java,Jukito,我在jukito单元测试中遇到了一些问题。我似乎不能嘲笑提供者。示例: import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; @Singleton public class ServiceClass1 { @Inject Provider<ConnectionClass> provider; public
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@Singleton
public class ServiceClass1 {
@Inject
Provider<ConnectionClass> provider;
public void method1() {
Object o = provider.get().getO(); //during mainTest, provider is null and I get Nullpointer
}
}
@Singleton
public class ConnectionClass {
public Object getO() {
//this is not relevant
}
}
public class ConfigurationModule extends AbstractModule {
bind(ServiceClass1.class).in(Singleton.class);
bind(ConnectionClass.class).in(Singleton.class);
}
@RunWith(JukitoRunner.class)
public class ServiceClass1Test {
@InjectMocks
ServiceClass1 service;
@Mock
Provider<ConnectionClass> connectionClassProvider;
@Mock
ConnectionClass connectionClass;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
when(connectionClassProvider.get()).thenReturn(connectionClass);
}
@Test
public void mainTest() {
service.method1();
}
}
如果有人对我有什么建议,我将不胜感激。使用构造函数注入而不是字段注入:
@Singleton
public class ServiceClass1 {
Provider<ConnectionClass> provider;
@Inject
public ServiceClass1(Provider<ConnectionClass> provider) {
this.provider = provider;
}
}
@Singleton
公共类服务类别1{
提供者;
@注入
公共服务类别1(提供商){
this.provider=提供者;
}
}
以及删除模拟:
@Mock
Provider<ConnectionClass> provider;
ServiceClass1 serviceClass1;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
serviceClass1 = new ServiceClass1(provider);
}
@Mock
提供者;
服务类别1服务类别1;
@以前
公共作废设置(){
initMocks(this);
serviceClass1=新的serviceClass1(提供者);
}
让一切顺利。这可能是由注射引起的吗?不管怎样,我想现在就这样吧
@Mock
Provider<ConnectionClass> provider;
ServiceClass1 serviceClass1;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
serviceClass1 = new ServiceClass1(provider);
}