有谁知道如何在Android junit测试案例中获得Test项目的上下文(扩展了AndroidTestCase)。
注意:该测试不是仪器测试。
注意2:我需要测试项目的上下文,而不是要测试的实际应用程序的上下文。
我需要它来从测试项目中的资产中加载一些文件。
有谁知道如何在Android junit测试案例中获得Test项目的上下文(扩展了AndroidTestCase)。
注意:该测试不是仪器测试。
注意2:我需要测试项目的上下文,而不是要测试的实际应用程序的上下文。
我需要它来从测试项目中的资产中加载一些文件。
Answers:
Android测试支持库提供了一种新方法(当前为androidx.test:runner:1.1.1
)。Kotlin更新示例:
class ExampleInstrumentedTest {
lateinit var instrumentationContext: Context
@Before
fun setup() {
instrumentationContext = InstrumentationRegistry.getInstrumentation().context
}
@Test
fun someTest() {
TODO()
}
}
如果您还希望运行应用程序上下文:
InstrumentationRegistry.getInstrumentation().targetContext
完整的运行示例:https : //github.com/fada21/AndroidTestContextExample
看这里:getTargetContext()和getContext(在InstrumentationRegistry上)有什么区别?
compile "com.android.support.test:runner:1.0.1"
到您的gradle
InstrumentationRegistry.getInstrumentation().context
改用。
经过一些研究,唯一可行的解决方案似乎是约克所指出的。您必须扩展InstrumentationTestCase,然后可以使用getInstrumentation()。getContext()访问测试应用程序的上下文-这是使用以上建议的简短代码段:
public class PrintoutPullParserTest extends InstrumentationTestCase {
public void testParsing() throws Exception {
PrintoutPullParser parser = new PrintoutPullParser();
parser.parse(getInstrumentation().getContext().getResources().getXml(R.xml.printer_configuration));
}
}
正如您可以在AndroidTestCase源代码中阅读的那样,该getTestContext()
方法是隐藏的。
/**
* @hide
*/
public Context getTestContext() {
return mTestContext;
}
您可以@hide
使用反射绕过注释。
只需在您的中添加以下方法AndroidTestCase
:
/**
* @return The {@link Context} of the test project.
*/
private Context getTestContext()
{
try
{
Method getTestContext = ServiceTestCase.class.getMethod("getTestContext");
return (Context) getTestContext.invoke(this);
}
catch (final Exception exception)
{
exception.printStackTrace();
return null;
}
}
然后getTestContext()
随时拨打电话。:)
java.lang.NoSuchMethodException: android.test.ServiceTestCase.getTestContext()
更新: AndroidTestCase
在API级别24中不推荐使用该类InstrumentationRegistry
。请改用。新的测试应使用Android测试支持库编写。链接到公告
您应该从AndroidTestCase而不是TestCase扩展。
AndroidTestCase类概述
如果您需要访问“资源”或其他依赖于“活动上下文”的事物,请对其进行扩展。
如果要使用Kotlin和Mockito获取上下文,可以按照以下方式进行操作:
val context = mock(Context::class.java)
希望对您有帮助
其他答案已经过时。现在,每次扩展AndroidTestCase时,都可以使用mContext Context对象。