1

我正在为 android 服务实现编写 JUnit 测试代码,我必须使用复制到 sdcard 上的一些文件来初始化测试。我的班级签名是这样的:

public class ImageServiceTest extends ServiceTestCase<ImageService>  

我正在尝试使用技巧从资产中复制文件,但 getAssets() 方法需要扩展 Activity 类。

public void copyAssets() {
    AssetManager assetManager = getAssets();
    ...
}

那么..我如何将文件从资产复制到 sdcard 以在 android 中设置 junit 测试?

先谢谢了。

附言:

'getSystemContext().getAssets();', 'getContext().getAssets();', 'getApplicationContext();' 返回服务项目上下文,而不是测试项目上下文。

现在我正在尝试使用 Instrumentation,但是它需要一个 Activity 并且我正在使用一个服务项目。我正在寻找如何在没有 Activity 的情况下使用 Instrumentation ...

4

3 回答 3

7

好的,这很容易。

我的主要问题是从测试项目中获取上下文以访问他们的资产文件夹。但 getContext() 返回主项目上下文。因此,为了获得测试项目上下文,我创建了一个通过测试包的新上下文:

Context mTestAppContext = getContext().createPackageContext("com.project.myapp",
                Context.CONTEXT_IGNORE_SECURITY);

:-)

于 2011-07-07T21:14:49.420 回答
1

你可以这样做:

protected void setUp() throws Exception {
    super.setUp();
    AssetManager assets = getSystemContext().getAssets();
    InputStream input = assets.open("file.txt");
    assertNotNull(input);
}

但考虑到在这种情况下资产应该在服务主项目中。

于 2011-07-04T22:35:45.813 回答
0

在AndroidTestCase中还有一个隐藏方法,它提供了所需的内容。它可以通过反省来暴露

private Context getTestContext() throws Exception
{
  return (Context)getClass().getMethod("getTestContext").invoke(this);
}
于 2012-08-24T20:34:05.447 回答