在AndroidX中,InstrumentationRegistry现在已被弃用。
此方法已弃用.在大多数情况下,应使用getApplicationContext(),而不应使用检测测试上下文.如果确实需要访问得测试上下文以访问其资源,建议改用getResourcesForApplication(String).
但是,我找不到任何示例来说明如何在测试中获取PackageManager
的示例以调用getResourcesForApplication
,以及应该为它的字符串参数提供哪个包名。
例如,下面是当前有效的代码:
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.io.IOException;
import java.io.InputStream;
import androidx.test.InstrumentationRegistry;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import static org.junit.Assert.*;
@RunWith(AndroidJUnit4.class)
public class MyTest {
@Test
public void processImage() {
// load image from test assets
AssetManager am = InstrumentationRegistry.getContext().getAssets();
InputStream is = null;
Bitmap image = null;
try {
is = am.open("image.jpg");
image = BitmapFactory.decodeStream(is);
} catch (IOException e) {
e.printStackTrace();
} finally {
if ( is != null ) {
try {
is.close();
} catch (IOException ignored) { }
}
}
assertNotNull(image);
// do something with the image
}
}
现在,如何在不使用过时的InstrumentationRegistry.getContext()
的情况下重写此测试?请记住,image.jpg
不是应用程序资产的一部分-它位于src/androidTest/assets
文件夹中,并被打包到AppName-buildType-androidTest.apk
中(它不存在于AppName-buildType.apk
中,我知道其包名)。
如何推导测试APK的包名?有没有可能避免在我的单元测试中硬编码包名字符串?我正在寻找一个和原始代码一样优雅的解决方案,但不使用过时的方法。
1条答案
按热度按时间0lvr5msh1#
我认为您应该使用
InstrumentationRegistry.getInstrumentation().getContext().getAssets()
而不是InstrumentationRegistry.getContext().getAssets()
。它将使用您的测试上下文,因此您应该获得您的资产。