gpt4 book ai didi

android - BroadcastReceiver 向 IntentService 发送 Intent 时单元测试失败

转载 作者:行者123 更新时间:2023-11-29 00:57:34 25 4
gpt4 key购买 nike

我有一个启动 IntentServiceBroadcastReceiver:

@Override
public void onReceive(Context context, Intent intent) {

ParamsRequest paramsRequest = new ParamsRequest.Builder()
.setUrl(intent.getStringExtra("url"))
.build();

Intent serviceIntent = new Intent(context, MyIntentService.class);
serviceIntent.putExtra("paramsKey", paramsRequest);
context.startService(serviceIntent);
}

并且 MyIntentService 检索 Intent(使用对象 paramsRequest):

@Override
protected void onHandleIntent(Intent intent) {

ParamsRequest paramsRequest = (ParamsRequest) intent.getSerializableExtra("paramsKey");

//more code
}

我有一个测试来确保正确发送和检索 Intent :

@Test
public void testStartAndroidProofService() {
Intent intent = new Intent(context, AndroidProofService.class);
intent.putExtra("paramsKey", paramsRequest);

receiver.onReceive(context, intent);
assertNull(receiver.getResultData());

ArgumentCaptor<Intent> argumentIntent = ArgumentCaptor.forClass(Intent.class);
Mockito.verify(context, times(1)).startService(argumentIntent.capture());
assertEquals(paramsRequest, argumentIntent.getValue().getSerializableExtra("paramsKey"));
}

但是 AssertEquals 失败了:

enter image description here

知道为什么我有 2 个不同的对象吗?

编辑 argumentIntent.capture() 中捕获的Intent 包含一个ParamsRequest 对象,但所有字段在这个对象中是 null

最佳答案

这是关于序列化的。

当您将 ParamsRequest 放入 Intent 时,在引擎盖下,ParamsRequest 中的所有字段都被转换为字符串、 bool 值、整数等所以他们可以存储。稍后当您从 Intent 检索 ParamsRequest 时,所有这些值都会被收集并创建一个新的 ParamsRequest。因此,初始的 ParamsRequest 和第二个 ParamsRequest 是不同的对象,然后您会得到断言错误。

您在这里要做的是比较每个字段或 ParamsRequest 或覆盖 ParamsRequestequals

关于android - BroadcastReceiver 向 IntentService 发送 Intent 时单元测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53497100/

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