应用资源与测试资源之间的可绘制对象加载不同



我正在为我正在处理的应用程序编写一些UI测试,我需要根据推送通知切换图像。为了在没有推送通知的情况下编写测试,我将一个 png 文件放在 androidTest res 目录中,然后使用测试资源中的资源 ID 使用 ContextCompat.getDrawable() 加载它。我还使用应用资源中的 id 从应用资源加载相同的图像。

下面是加载资源的代码:

Drawable drawable1 = ContextCompat.getDrawable(setupRule.getActivity().getApplicationContext(), R.drawable.my_contact_pic);
Drawable drawable2 = ContextCompat.getDrawable(setupRule.getActivity().getApplicationContext(), com.mycompany.myapp.devenv.test.R.drawable.my_contact_pic);

drawable1 是 BitmapDrawable 的一个实例,drawable2 是 NinePatchDrawable 的一个实例。由于 drawable2 的基础 PNG 是 pnog for drawable1 的副本,我希望它们都是 BitmapDrawables,我可以对此进行编码,但想了解为什么会发生这种情况以供将来参考。

所以我终于想通了,要从androidTest资源加载png,你必须指定InstrumentationRegister.getContext(),否则它将从应用程序资源加载。巧合的是,我指定的资源 ID 指向一个 NinePatch 文件。

最新更新