首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从android Junit ServiceTestCase的setUp方法中复制资源中的文件?

如何从android Junit ServiceTestCase的setUp方法中复制资源中的文件?
EN

Stack Overflow用户
提问于 2011-07-05 05:30:52
回答 3查看 3.3K关注 0票数 1

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

代码语言:javascript
复制
public class ImageServiceTest extends ServiceTestCase<ImageService>  

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

代码语言:javascript
复制
public void copyAssets() {
    AssetManager assetManager = getAssets();
    ...
}

所以..。如何将资产中的文件复制到SD卡,以便在android中setUp junit测试?

在进阶时谢谢。

Ps:

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-08 05:14:49

好的,这很简单。

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

代码语言:javascript
复制
Context mTestAppContext = getContext().createPackageContext("com.project.myapp",
                Context.CONTEXT_IGNORE_SECURITY);

:-)

票数 7
EN

Stack Overflow用户

发布于 2011-07-05 06:35:46

您可以这样做:

代码语言:javascript
复制
protected void setUp() throws Exception {
    super.setUp();
    AssetManager assets = getSystemContext().getAssets();
    InputStream input = assets.open("file.txt");
    assertNotNull(input);
}

但要考虑到,在这种情况下,资产应该在Service主项目中。

票数 1
EN

Stack Overflow用户

发布于 2012-08-25 04:34:05

AndroidTestCase中还有一个隐藏的方法,它提供了所需的内容。它可以是exposed with introspection

代码语言:javascript
复制
private Context getTestContext() throws Exception
{
  return (Context)getClass().getMethod("getTestContext").invoke(this);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6576230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档