[英]How to mock an object with Guice @Inject?
我有一個 class A 和一個 class B。
public class A{
@Inject // Guice Inject
private B b;
}
測試 class 看起來像 -
public class ATest{
private B b;
private A a;
@Before
public void setup() {
b = Mockito.mock(b.class);
a = new A();
}
}
問題是 class B 沒有被嘲笑。 在測試 class 中,每當調用 B 的方法時都會出現 NullPointerException。 我無法對 class A 進行更改。請幫助我了解如何成功模擬 class B?
一種方法是使用Module
在測試中創建一個 Guice Injector
,這會將要注入的 Class 綁定到B
的具體實例,然后使用Injector#injectMembers(a)
B
b變成a
.
工作示例:
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
class InjectableTest {
private static class Service {
@Inject
private Object obj;
public Object getObj() {
return obj;
}
}
private final Object obj = Mockito.mock(Object.class);
private final Injector injector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(Object.class).toInstance(obj);
}
});
@Test
void t() {
Service s = new Service();
injector.injectMembers(s);
Assertions.assertEquals(obj, s.getObj());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.