Java 字段的方法上的Mockito when()

Java 字段的方法上的Mockito when(),java,testing,mockito,mvp,Java,Testing,Mockito,Mvp,我试图在简单的应用程序中使用Mockito这个交互器进行测试,它可以作为有限状态机工作 public class Machine { private OnActionListener mListener; private ArrayList<State> mStates; private FSMJsonParser parser; private State mCurrentState; public Machine(String jsonConfig, OnActionLis

我试图在简单的应用程序中使用Mockito这个交互器进行测试,它可以作为有限状态机工作

public class Machine {

private OnActionListener mListener;
private ArrayList<State> mStates;
private FSMJsonParser parser;

private State mCurrentState;

public Machine(String jsonConfig, OnActionListener listener, FSMJsonParser parser) throws IOException {

    this.mListener = listener;
    this.parser = parser;
    initStates(jsonConfig);
    mCurrentState = getStateByName("AlarmArmed_AllLocked");
}

private void initStates(String jsonConfig) throws IOException{

    mStates = parser.parseFSMFromJson(jsonConfig);
}

我使用方法parseFSMFromJson(readConfig())提供了一个parse JSON(带有状态描述,存储在资产中)。当以调试模式运行测试时,JSON被正确解析。但机器模拟对象的字段未初始化,为null,所有测试均失败。我需要初始化ArrayList mStates,以便机器类正常工作。如何正确测试该类???

您需要在@Before方法中使用MockitoAnnotations.initmock(this),因为您没有使用MockitoJUnitRunner运行测试用例(请参阅)

像这样:

@Before
public void setUp() throws IOException {
    MockitoAnnotations.initMocks(this);
    when(parser.parseFSMFromJson(anyString())).thenReturn(parseFSMFromJson(readConfig()));
}

我宁愿这样做而不是模仿

private Machine machine;

    @Before
    public void setUp() throws IOException {
        MockitoAnnotations.initMocks(this);
        machine = new Machine(jsConfig, ...., parser);//Since you already have a constructor
when(parser.parseFSMFromJson(anyString())).thenReturn(parseFSMFromJson(readConfig()));
    }
private Machine machine;

    @Before
    public void setUp() throws IOException {
        MockitoAnnotations.initMocks(this);
        machine = new Machine(jsConfig, ...., parser);//Since you already have a constructor
when(parser.parseFSMFromJson(anyString())).thenReturn(parseFSMFromJson(readConfig()));
    }