- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我开始使用 Mockito 进行 Android headless 单元测试。我要测试的部分是在依赖于 Context
的后端。我尝试模拟 Context
但在运行测试时我得到了 null。
这个例子中模拟的 Context
没有告诉我它是如何被模拟的: https://developer.android.com/training/testing/unit-testing/local-unit-tests.html#setup
上面链接中提到的示例 (https://github.com/googlesamples/android-testing/tree/master/unit/BasicSample) 没有说明如何模拟上下文的示例。
所以我有点迷路了。
我的 gradle 依赖项中有以下内容:
testCompile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test:runner:0.4'
androidTestCompile 'com.android.support.test:rules:0.4'
androidTestCompile 'com.android.support:support-annotations:23.0.1'
testCompile 'org.mockito:mockito-core:1.10.19'
androidTestCompile('com.android.support.test:testing-support-lib:0.+')
代码 fragment :
@RunWith(MockitoJUnitRunner.class)
public static Test {
@Mock Context mContext;
RequestQueue mQueue;
@Test public void getCategories(){
final String SERVER = "http://{...}/categories";
mContext = mock(Context.class);
int size = 20;
when(mContext.getResources().getInteger(R.integer.cache_size)).thenReturn(size);
mQueue = VolleyUtil.newRequestQueue(mContext, null, size);
final Response.Listener<String> listener = new Response.Listener(){
//...
}
Response.ErrorListener error = new Response.ErrorListener(){
///...
}
mQueue.add(new JsonRequest(SERVER, listener, error);
}
VolleyUtil.newRequestQueue(final Context context, HttpStack stack, final int cacheMB){
final File cacheDir = new File(context.getCacheDir(), "volley");
if(stack == null) {
if(Build.VERSION.SDK_INT >= 9) {
stack = new HurlStack();
} else {
String userAgent = "volley/0";
try {
final String network = context.getPackageName();
final PackageInfo queue = context.getPackageManager().getPackageInfo(network, 0);
userAgent = network + "/" + queue.versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStacktrace();
}
stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));
}
}
final BasicNetwork network = new BasicNetwork((HttpStack)stack);
final RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir,diskCacheMB*1000000), network);
queue.start();
return queue;
我的空异常发生在:
final PackageInfo queue = context.getPackageManager().getPackageInfo(network, 0);
我应该模拟 PackageManager
还是 Application
实例?
最佳答案
因为您不是在 JUnit 上测试 android 资源,所以您也需要模拟它。例如:
PackageInfo pi = new PackgeInfo();
// modify it's value the way you desire
when(mContext.getPackageManager().getPackageInfo(network, 0)).thenReturn(pi);
然后继续单元测试。
关于android - Mockito 模拟 Android 上下文 PackageManager 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32872608/
我是android编程的新手。我已经使用带有 MainActivity.java 和 ClassFragment.java 文件的 Eclipse 创建了一个应用程序。 ClassFragment 是
我开发了一个应用程序,我在其中启用了我们拥有的任何应用程序都可以手动安装 但我的问题是我只想启用我自己的包名而不是任何其他应用程序包名。 这是我用过的代码。 try { PackageMana
我正在尝试使用 Pacakge 管理器从设备中获取已卸载应用程序的列表。但是,代码返回所有已安装应用程序的列表。 // get a list of all installed apps
我想让所有有 intentlisteners 的应用程序 Intent.CATEGORY_HOME 所以基本上是启动器 我有这段代码: final Intent mainIntent = null;
我正在浏览 PackageManager API。我发现定义了以下常量: 1) GET_DISABLED_COMPONENTS 2) GET_DISABLED_UNTIL_USED_COMPONENT
为了解决问题,我想我会尝试重新安装Chocolatey软件包提供程序。似乎没有cmdlet可以删除或卸载程序包提供程序。我指的不是删除软件包源或软件包。我在Windows 10上使用PowerShel
我正在编写一个应用程序,它具有某种程度的模块化系统。它有一个核心应用程序和一些应用程序,这些应用程序由一个实现所需接口(interface)的 Service 组成。我关注了the guide创建 I
您好,我正在从我的应用程序中打开另一个应用程序。我想在对话框中显示另一个应用程序。那么我有什么选择。我正在尝试下面的代码... public class PictureGallery extends
我正在尝试使用自 API 1.0 以来可用的 Android PackageManager.setComponentEnabledSetting 问题是,我不明白如何正确使用它。我传递了一个包含包组件
如何编写一个 Android 应用程序来接收来 self 的 Yamaha YDP-113 电子钢琴的 MIDI 事件? 当我强制执行时,出现运行时错误: FATAL EXCEPTION: main
所以我找到了this有用的答案,它描述了需要使用哪些 Android 部件来检查 Android 应用程序是否已启用。我还阅读了链接的文档。 ApplicationInfo ai = getActiv
我的应用使用 WebView。从 L-preview 开始,引入了一个新的功能过滤器: FEATURE_WEBVIEW。声明您的应用只能安装在完全实现 android.webkit.* API 的设备
我正在使用 PackageManager.getApplicationLabel(ApplicationInfo) 获取应用程序名称。但是这个名称可能会根据设备区域设置和应用程序资源字符串而改变。 所
如果我使用下面的代码禁用 AndroidManifest.xml 中定义的静态 BroadcastReceiver,它会在重启后重新启用吗?它似乎不是,但文档没有说明是否应该。 final Compo
有没有办法判断我从 getApplicationIcon() 返回的 Drawable 是否是默认/内置图标? 例如,我的模拟器上安装了几个应用程序。 “Adobe Reader”有一个由 Adob
我正在查看 PackageManager 类的源代码,它和所有方法一样是抽象的。制造商是否应该为它编写一个真正的实现,或者我遗漏了什么? 最佳答案 PackageManager 的真正实现是位于 fr
我有一个 .java 文件: .... import android.content.pm.ApplicationInfo; import android.content.pm.PackageI
我正在 Android 中编写一个启动器,这是我一直试图修复一段时间但没有成功的问题。 我有下面的代码来查询在我的启动器最开始运行的所有 Activity ,比如 onResume()。 final
我在使用 PackageManager.getInstalledPackages() 方法时遇到了一个非常奇怪的情况。我第一次启动我的 Activity 时,我得到了所有已安装包的有效列表。但是我第二
我计划在亚马逊应用商店和 Google Play 上发布我的应用程序,并且我的应用程序中的某些内容需要根据应用程序是否从亚马逊应用程序商店安装而略有不同。如果我正确理解了 PackageManager
我是一名优秀的程序员,十分优秀!