@Config(manifest = Config.NONE)
//模拟上下文
@RunWith(RobolectricTestRunner.class)
@PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"})
//需要Mock的类
@PrepareForTest({MDVRServerMessageProcessor.class})
public class MDVRCommunicationTest {
//Mock和上下文同时用时,@RunWith只能用一个,这里是Mock的另一种配置方式
@Rule
public PowerMockRule rule = new PowerMockRule();
//测试前
@Before
public void setUp() throws Exception {
Context mockContext = RuntimeEnvironment.application;
MDVRCommunicationManager.getInstance().init(mockContext);
}
//测试后
@After
public void tearDown() throws Exception {
MDVRCommunicationManager.getInstance().release();
}
@Test
public void testRealtimeDataCmd() throws Exception {
MDVRServerMessageProcessor mockProcessor = PowerMockito.spy(new MDVRServerMessageProcessor());
String hexStrOfCmd = "9700030000003100000000000C0000000001DC732F073BBC7D021909261105000001";
byte[] bytesOfCmd = HexStringUtils.hexString2Bytes(hexStrOfCmd);
MDVRMessage message = new MDVRMessage(bytesOfCmd);
//实时数据指令
mockProcessor.process(bytesOfCmd);
//验证私有方法调用
PowerMockito.verifyPrivate(mockProcessor, Mockito.times(1)).invoke("handleRealtimeData", Mockito.any());
}
@Test
public void onAuth() throws Exception {
//模拟鉴权事件
mMockCommunicationInstance.init(mMockContext);
String testAuthCode = "0000";
AuthEvent event = new AuthEvent(testAuthCode, null);
mMockCommunicationInstance.onAuth(event);
//验证私有方法调用
PowerMockito.verifyPrivate(mMockCommunicationInstance, Mockito.times(1)).invoke("auth", Mockito.any(), Mockito.any());
//验证鉴权消息生成 (注意下面两句放在一起,进行static方法调用验证)
PowerMockito.verifyStatic(Mockito.times(1));
JT808Generator.generateAuthMsg(mMockContext, testAuthCode, 0);
}
}