用Mockito模拟数据

问题描述 投票:0回答:1

我正试图用Mockito模拟数据并获得NPE。以下是我要测试的示例代码:

public class MyPresenter implements Contract.Presenter {
  @Inject
  MyManager myManager;

  @Override
  public void doSomething(Data data) {
    myManager.doSomething(data);
  }
}

public class MyPresenterTest {

  @Mock
  private MyManager myManager; 

  @InjectMocks
  private MyPresenter myPresenter;

  @Before
  public void setup(){
  MockitoAnnotations.initMocks(this);
  }

  @Test
  public void doSomethingTest(){
    Data data = new Data();
    myPresenter.doSomething(data);
    verify(myManager).doSomething(data);
  }
}

NPE来自MyPresenter类的以下行。

myManager.doSomething(数据);

MyPresenter中的@Inject使用Dagger 2注入对象。

有人可以帮忙吗?

android unit-testing junit mockito dagger-2
1个回答
2
投票

Mockito只将mocks注入构造函数,使字段不确定。为了正确地测试它,需要使用构造函数参数和Mockito手动初始化类。如果您可以添加一个接收MyManager实例的构造函数,它将起作用 -

public class MyPresenter implements Contract.Presenter {
  @Inject
  MyManager myManager;

  public MyPresenter(MyManager myManager){ // constructor is required for mocikto to inject your fields.
     this.myManager = manager
  }

  @Override
  public void doSomething(Data data) {
     myManager.doSomething(data);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.