gpt4 book ai didi

android - 使用 Robolectric Shadow NfcAdapter 对 NFC 助手类进行单元测试

转载 作者:搜寻专家 更新时间:2023-11-01 07:52:37 24 4
gpt4 key购买 nike

我正在尝试使用 Robolectric 来测试 NFC 助手类。简化,我正在做这样的事情:

Activity activity = Robolectric.buildActivity(Activity.class)
.create()
.start()
.resume()
.get();
NfcAdapter nfcAdapter = ShadowNfcAdapter.getNfcAdapter(activity);

然后练习我的 NFC 助手类,因为它会执行如下操作:

if (!nfcAdapter.isEnabled()){
//more stuff
}

但是,调用 nfcAdapter.isEnabled() 会导致空指针异常。

java.lang.NullPointerException
at android.nfc.NfcAdapter.isEnabled(NfcAdapter.java:621)
at <package>.test_NfcIntent_shouldPostToBus(NfcHelperTest.java:49)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:251)
at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:188)
at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:54)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:152)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

异常看起来来自 Android 的 NfcAdapter.java

public boolean isEnabled() {
try {
return sService.getState() == STATE_ON;
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
return false;
}
}

其中 sService 为空。事实上,当我使用调试器时,我可以看到 nfcAdapter 的字段全部为 null 或本身具有 null 字段的对象。

这是使用 ShadowNfcAdapter 的正确方法吗?或者,测试 NFC 助手类在触发时是否执行正确操作的正确方法是什么?

最佳答案

你能不能这样试试:

final Activity activty = Robolectric.setupActivity(Activity.class);
NfcAdapter adapter = NfcAdapter.getDefaultAdapter(activty);

final ShadowNfcAdapter shadowNfcAdapter = shadowOf(adapter);

shadowNfcAdapter.isEnabled()

关于android - 使用 Robolectric Shadow NfcAdapter 对 NFC 助手类进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32749311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com