【发布时间】:2017-03-30 17:46:54
【问题描述】:
我正在尝试在简单的应用程序中使用 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);
}
有测试:
@RunWith(PowerMockRunner.class)
@PrepareForTest(FSMJsonParser.class)
public class FSMtest {
@Mock
State state;
@Mock
ControlPresenter presenter;
@Mock
FSMJsonParser parser;
@InjectMocks
Machine machine;
@Before
public void setUp() throws IOException {
when(parser.parseFSMFromJson(anyString())).thenReturn(parseFSMFromJson(readConfig()));
}
@Test
public void testAlarmArmedAllLockedStateActions() throws IOException{
machine.lock();
verify(machine, times(1)).setCurrentState(anyString());
machine.lockx2();
verify(machine, times(1)).setCurrentState("AlarmArmed_AllLocked");
machine.unlock();
verify(machine, times(1)).setCurrentState("AlarmDisarmed_DriverUnlocked");
machine.unlockx2();
verify(machine, times(1)).setCurrentState("AlarmDisarmed_AllUnocked");
}
我通过方法 parseFSMFromJson(readConfig()) 提供了一个解析 JSON(带有状态描述,存储在资产中)。当使用调试模式运行测试时,JSON 被正确解析。但是 Machine 模拟对象的字段没有初始化,并且为 null 并且所有测试都失败了。我需要初始化 ArrayList mStates 才能正确工作 Machine 类。如何正确测试这个类??
【问题讨论】: