gpt4 book ai didi

java - 如何从模拟上下文获取区域设置

转载 作者:行者123 更新时间:2023-12-02 04:00:18 25 4
gpt4 key购买 nike

我正在尝试进行一些单元测试,但我还没有真正确定运行程序或测试类。

最后,这是我验证其是否有效的方法:

public static void getData(final Context context, final Callback<MyObject> callback) {

Locale locale = context.getResources().getConfiguration().locale;
MyObjectService myService = new MyObjectService(getRequestHeaders(context), locale);
}

所以我需要一个包含资源、配置、区域设置和 SharedPreferences 的模拟上下文。

我尝试过 PowerMockito、AndroidTestCase、AndroidTestRunner、ApplicationTestCase。我所能得到的只是一个没有任何内容的模拟上下文,或者模拟资源,但我不知道如何将它们添加到模拟上下文中(基本上是重新创建一个上下文)。

这是我目前的最后一次尝试(尽管我尝试过更复杂的尝试,但没有成功):

导入com.myApp.android.app.shop.util.ServiceUtils;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.modules.junit4.PowerMockRunner;

import android.content.Context;

@RunWith(PowerMockRunner.class)
public class TestLogin
{
@Test
public void test()
{
Context context = Mockito.mock(Context.class);
ServiceUtils.getData(context, dataCallback);
}
}

我得到的异常是来自 getData() 的 NPE,因为传递的上下文没有资源。

有什么建议吗?

最佳答案

Android 不是一个容易模拟的系统。我也尝试过使用 Mockito 来模拟框架,但它很快就变得非常复杂。像资源和 SharedPreferences 这样的东西并不容易模拟。这些问题已在 Robolectric 等第三方 API 中得到解决。

我建议您使用Robolectric用于您的 Android 单元测试。 Robolectric 在标准虚拟机中运行(即不需要模拟器)。 Robolectric 模拟大部分 Android 系统,从而最大限度地减少(但不是消除)构建模拟的需要。我发现它对于 Android TDD 来说是一个非常有用的工具。

关于java - 如何从模拟上下文获取区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35001058/

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