@Singleton
public class RealWorkWindow implements WorkWindow {
@Inject private Factory myFactory;
public RealWorkWindow (
LongSupplier longSupplier
) {
defaultWindow = myFactory.create(() -> 1000L);
workWindow = myFactory.create(longSupplier);
}
...
正如你所看到的,我正在注入(inject)一个工厂类(通过 FactoryModuleBuilder 注入(inject))
测试代码
@Test
public class RealWorkWindowTest {
private RealWorkWindow testWindow;
@BeforeMethod
void setup() {
MockitoAnnotations.initMocks(this);
testWindow = spy(new RealWorkWindow(() -> 1L));
}
工厂.py
public interface RealWorkWindowFactory {
RealWorkWindowFactory create(LongSupplier longSupplier);
}
模块
install(new FactoryModuleBuilder()
.implement(WorkWindow.class, RealWorkWindow.class)
.build(RealWorkWindowFactory.class));
当我运行测试 RealWorkWindowTest
时,测试失败,并显示工厂不存在的 NPE,这是有道理的,因为我认为注入(inject)不会运行。
如何在 junit 中进行注入(inject)测试?或者正确地 mock ?
类似于https://mhaligowski.github.io/blog/2014/05/30/mockito-with-both-constructor-and-field-injection.html中描述的问题
但是我遇到的问题是mock使用了IN构造函数,因此在实例化测试对象时它仍然为空(因为我还没有调用Mockito.init)
最佳答案
如果您使用MockitoJUnitRunner
,则可以使用@Mock
为Factory创建模拟并注入(inject)它。
@RunWith(MockitoJUnitRunner.class)
public class MyTest {
@Mock
private Factory myFactory;
@InjectMocks
private RealWorkWindow realWorkWindow;
@Test
public void testSomething() {
when(myFactory.create(/* insert param here */)).thenReturn(/* insert return value here */);
/* perform your test */
}
}
关于Java:使用 Inject 注释对类进行 Junit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56435924/