使用Robolectric测试HostApduService

3

我想用Robolectric测试我的HostApduService,但我找不到测试该服务的方法。常规测试Service的方法对HostApduServices无效。有什么建议吗?

我到目前为止尝试过的:

普通服务的示例

public class MyNormalService extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    public void doStuff(){
        // Logic
    }
}

示例HostApduservice
public class MyHostApduService extends HostApduService {

@Override
    public byte[] processCommandApdu(final byte[] commandApdu, Bundle extras) {
        // Do my stuff
    }
}

测试

@Config(emulateSdk = 18)
@RunWith(RobolectricTestRunner.class)
public class MyHostApduServiceTest {

    @Test
    public void testNormalService(){ // Succeeds
        MyNormalService service = new MyNormalService();
        assertNotNull(service); 
    }

    @Test
    public void testProcessCommandApdu1(){ // Fails
        MyHostApduService service = new MyHostApduService();
        assertNotNull(service);
    }
    @Test

    public void testProcessCommandApdu2(){ // Fails
        MyHostApduService service = Robolectric.buildService(MyHostApduService.class).create().get();
        assertNotNull(service);
    }
    @Test
    public void testProcessCommandApdu3(){ // Fails
        MyHostApduService service = Robolectric.setupService(MyHostApduService.class);
        assertNotNull(service);
    }
}

所有的APDU测试都出现了同样的错误:

java.lang.RuntimeException: Stub!
    at android.nfc.cardemulation.HostApduService.__constructor__(HostApduService.java)
    at android.nfc.cardemulation.HostApduService.<init>(HostApduService.java:5)
    at com.abc.MyHostApduService.<init>(MyHostApduService.java:

测试普通服务成功。

1个回答

0

我使用了Android支持库中的Espresso测试框架。 以下是我的基本测试代码,可以提供成功的结果:

@RunWith(AndroidJUnit4.class)
@LargeTest
public class HostApduServiceTest {

    @Rule
    public UiThreadTestRule uiThreadTestRule = new UiThreadTestRule();

    @Test
    public void testService() throws Throwable {
        uiThreadTestRule.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                MyHostApduService service = new MyHostApduService();
                Assert.assertNotNull(service);
            }
        });


    }
}

这就是对应的Android依赖项的样子:

testCompile 'junit:junit:4.12'

compile 'com.android.support:support-annotations:23.1.1'

androidTestCompile ('com.android.support.test:runner:0.5'){
    exclude module: 'support-annotations'
}
androidTestCompile ('com.android.support.test.espresso:espresso-core:2.2.2'){
    exclude module: 'support-annotations'
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接