如何从 android Junit ServiceTestCase 的 setUp 方法上的资产复制文件?

发布于 2024-11-18 16:42:45 字数 766 浏览 4 评论 0原文

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

public class ImageServiceTest extends ServiceTestCase<ImageService>  

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

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

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

提前致谢。

PS:

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

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

I'm writing JUnit test code for an android service implementation, and I have to initialize the tests with some files copied on sdcard. My class signature is like this:

public class ImageServiceTest extends ServiceTestCase<ImageService>  

I'm trying to use this tip to copy the files from assets, but the getAssets() method needs to extends Activity class.

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

So.. How I can copy files from assets to sdcard to setUp the junit test in android?

Thanks in advanced.

Ps:

'getSystemContext().getAssets();', 'getContext().getAssets();', 'getApplicationContext();' returns the Service Project context, not the test project context.

Now i'm trying to use Instrumentation, however it demands an Activity and I'm working with a Service project. I'm looking how to use Instrumentation without an Activity...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不回头走下去 2024-11-25 16:42:45

好吧,这很容易。

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

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

:-)

Ok, it was pretty easy.

My major problem was get the context from test project to access their assets folder. But getContext() returns the main project context. So, to get test project context I create a new context passing the test package:

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

:-)

愛上了 2024-11-25 16:42:45

您可以这样做:

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

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

You can do this:

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

but take into account that in this case assets should be in the Service main project.

音盲 2024-11-25 16:42:45

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

private Context getTestContext() throws Exception
{
  return (Context)getClass().getMethod("getTestContext").invoke(this);
}

There is also a hidden method, in AndroidTestCase, which provided what is needed. It can be exposed with introspection.

private Context getTestContext() throws Exception
{
  return (Context)getClass().getMethod("getTestContext").invoke(this);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文