Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用robolectric获取找不到资源的异常

使用robolectric获取找不到资源的异常
EN

Stack Overflow用户
提问于 2014-04-04 06:35:54
回答 1查看 1.3K关注 0票数 2
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Service class
MyService extends Service {

private SoundPool mSoundPool;
private int mSoundID;

@Override
public void onCreate(){

mSoundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
    @Override
    public void onLoadComplete(final SoundPool soundPool, final int sampleId,
            final int status) {
        mIsSoundLoaded = true;
    }
});
    //Here I am initializing soundpool and getting resource not found exception
    // It should be context of CustomRobolectricTestRunner 
    mSoundID = mSoundPool.load(getApplicationContext(),R.raw.btn_click, 1);

}

}

//服务测试类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 @RunWith(CustomRobolectricTestRunner.class)
//@RunWith(RobolectricTestRunner.class)
public class MyServiceTest
{

    @Test
    public void testOnCreate()
    {
        // String hello = this.activity.getString(R.string.app_name);
        // assertThat(hello, equalTo("Plus Box"));

        MyService service = new MyService();
        service.onCreate(); // Getting exception Resource not found.

        //To cross check, I have accessed resource in the following way
        //and it working fine. I am able to access resource here.
        /*      int resourceId = Robolectric
                .getShadowApplication()
                .getResources()
                .getIdentifier("btn_click", "raw",
                        Robolectric.getShadowApplication().getPackageName());
        if (resourceId != 0)
        {
            // Raw folder contains resource.
            System.out.println("The value of Raw ID " + resourceId);
            assertTrue(true);
        }
        else
        {
            // Raw folder doesn't contain resource.
            System.out.println("The value of Raw ID " + resourceId);
            assertTrue(false);
        }
    */


    }


}

我甚至尝试创建自己的自定义测试运行器,因为我的应用程序也有应用程序类(MyApplication)。但是看起来,它总是使用MyApplication上下文,而不是TestApplication。我点击了这个https://groups.google.com/forum/#!topic/robolectric/K2q8xAFfQOA链接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestApplication extends MyApplication {

    @Override
    public void onCreate() {

        createSession(UserGroup.Unknown, 0, SessionState.Active, "", 0, "");


    }

}

public class CustomRobolectricTestRunner extends RobolectricTestRunner
        implements TestLifecycle<Application> {


    public CustomRobolectricTestRunner(final Class<?> testClass)
            throws InitializationError {
        super(testClass);
    }

    @Override
    public void afterTest(Method arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void beforeTest(Method arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public Application createApplication(Method arg0, AndroidManifest manifest) {

        TestApplication testApplication = new TestApplication();
        ShadowContextWrapper shadowApp = Robolectric.shadowOf( testApplication );
        shadowApp.setPackageName("com.example.robolectric");
        testApplication.onCreate();

        return testApplication;
    }

    @Override
    public void prepareTest(Object arg0) {
        // TODO Auto-generated method stub

    }

}

任何帮助都会得到高度重视。向您致敬,Yuvi

EN

回答 1

Stack Overflow用户

发布于 2014-04-05 19:04:06

Robolectrial2.3引入了一个类似于ActivityController的ServiceController,来帮助驱动服务的生命周期。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ServiceController<MyService> controller = Robolectric.buildService(MyService.class);
MyService service = controller.attach().create().get()

或者简单地说:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MyService myService = Robolectric.setupService(MyService.class);

此外,如果您希望Robolectric使用您的测试应用程序类,那么如果您的应用程序类被命名为'MyApplication',则将您的测试应用程序类命名为'TestMyApplication‘,并将其放置在您的测试目录下的同一个包中。通过在类名前面加上"Test“,它告诉Robolectric使用TestMyApplication进行测试。(参考:http://robolectric.blogspot.ca/2013/04/the-test-lifecycle-in-20.html)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22855287

复制
相关文章
如何从列表中获取元素
观察URAM的物理管脚,不难发现A/B端口都有相应的地址、使能、读写控制信号。与BRAM不同的是URAM的读写使能信号是同一个管脚RDB_WR_A/B,其为0时执行读操作,为1时执行写操作,这意味着一旦A/B端口独立,同一端口的读写操作就无法同时发生,因此,如果采用上一篇文章中介绍的方法将其配置为两个独立的单端口RAM,其读写行为与常规的单端口RAM是不同的,进一步而言,此时的读写行为类似于NO_Change模式。
Lauren的FPGA
2019/10/30
17.4K0
Python中如何获取列表中重复元素的索引?
昨天分享了一个文章,Python中如何获取列表中重复元素的索引?,后来【瑜亮老师】看到文章之后,又提供了一个健壮性更强的代码出来,这里拿出来给大家分享下,一起学习交流。
前端皮皮
2022/08/17
13.4K0
Python中如何获取列表中重复元素的索引?
【说站】python列表元素的获取和查看
以上就是python列表元素的获取和查看,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/23
1.4K0
python中删除列表中重复元素
在面试中,很可能遇到给定一个含有重复元素的列表,删除其中重复的元素,下边给出三种方法来实现这个功能。
全栈程序员站长
2022/09/07
4.1K0
如何在 React 中获取点击元素的 ID?
在 React 应用中,我们经常需要根据用户的点击事件来执行相应的操作。在某些情况下,我们需要获取用户点击元素的唯一标识符(ID),以便进行进一步的处理。本文将详细介绍如何在 React 中获取点击元素的 ID,并提供示例代码帮助你理解和应用这个功能。
网络技术联盟站
2023/06/07
3.5K0
Python随机打乱列表中的元素
首先生成原列表的拷贝a_copy,新建一个空列表result,然后随机选取拷贝列表中的值存入空列表result,然后删除
宇宙之一粟
2020/10/26
6.7K0
python删除列表元素
remove 删除单个元素,删除首个符合条件的元素,按值删除,返回值为空 List_remove = [1, 2, 2, 2, 3, 4] print(List_remove.remove(2)) print("after remove", List_remove) # None # after remove [1, 2, 2, 3, 4] ---- pop 删除索引位置元素,无参情况下删除最后一个元素,返回删除的元素值 List_pop = [1, 2, 2, 2, 3, 4] print(List
演化计算与人工智能
2020/08/14
1.6K0
Python——去除列表中的重复元素
set(['I', 'I', 'M', 'E']) set(['I', 'E', 'M']) 集合中,没有重复的元素。利用集合这种数据结构的特性,可以去除列表中的重复元素。 一个列表中可能含有重复元素,使用set()可以实现列表的去重处理,但是无法知道哪些元素是重复的,下面的函数用于找出哪些元素重复了,以及重复的次数。 from collections import Counter a = [1,4,2,3,2,3,4,2] b = Counter(a) #求数组中每个数字出现了几次 print(b)
瑞新
2020/07/07
5K0
【Python】列表 List ① ( 数据容器简介 | 列表 List 定义语法 | 列表中存储类型相同的元素 | 列表中存储类型不同的元素 | 列表嵌套 )
Python 中的 数据容器 数据类型 可以 存放多个数据 , 每个数据都称为 元素 , 容器 的 元素 类型可以是任意类型 ;
韩曙亮
2023/10/11
3130
【Python】列表 List ① ( 数据容器简介 | 列表 List 定义语法 | 列表中存储类型相同的元素 | 列表中存储类型不同的元素 | 列表嵌套 )
如何在 WordPress 中获取最新被评论的文章列表
我之前的「WordPress 文章查询教程6:如何使用排序相关的参数」中详细介绍了文章查询的排序参数,其中介绍可以通过评论数进行排序:
Denis
2023/04/13
1.6K0
列表元素循环移位中Python切片的妙用
之前有个文章中介绍了列表循环移位的3中方法,原文请见:Python序列循环移位的3种方法 其中第二种方法虽然更直接地翻译了题目的要求,但是显得还是有点啰嗦,如果充分利用Python中的切片技术,可以写成下面更简洁的形式: >>> def demo(lst, k): x = lst[k-1::-1] y = lst[:k-1:-1] return list(reversed(x+y)) #测试用的列表 >>> lst = list(range(20)) #循环左移3位 >>> demo(l
Python小屋屋主
2018/04/16
5.6K0
python比较列表中元素大小和列表中元素的判定
列表的判定主要是判定列表中是否包含某个元素,使用逻辑运算符判定就可以了;列表的比较稍微复杂一些,首先比较的是两个列表中对应元素的大小,如果元素值一样,再比较列表长度。
python自学网
2021/12/01
5.7K0
python比较列表中元素大小和列表中元素的判定
python:删除列表中特定元素的几种方法
终于刷到一条不看答案就能轻松解出来的题目,更重要的是学习到了几种删除列表中元素的方法,值得做一下笔记
冰霜
2022/03/19
8.4K0
python:删除列表中特定元素的几种方法
使用Python取列表元素中的城市名(上篇)
前几天在Python最强王者群【eric】问了一个Python列表基础的问题,这里拿出来给大家分享下。
前端皮皮
2023/08/17
3960
使用Python取列表元素中的城市名(上篇)
如何从 Python 列表中删除所有出现的元素?
在 Python 中,列表是一种非常常见且强大的数据类型。但有时候,我们需要从一个列表中删除特定元素,尤其是当这个元素出现多次时。本文将介绍如何使用简单而又有效的方法,从 Python 列表中删除所有出现的元素。
网络技术联盟站
2023/06/01
12.4K0
使用Python取列表元素中的城市名(下篇)
前几天在Python最强王者群【eric】问了一个Python列表基础的问题,这里拿出来给大家分享下。
前端皮皮
2023/08/17
2090
使用Python取列表元素中的城市名(下篇)
Python 中如何向列表或数组添加元素
然而,与其它编程语言不同,数组在 Python 中不是一个内置的数据结构。Python 使用列表取代传统的数组。
Python学习者
2023/09/11
3790
Python 列表元素分组,比如 [1,
# 生成一个1到20的列表 a=[x for x in range(1,21)] # 把a列表切片,并赋值给b列表,x为0到20且步长为3的列表,在这里具体为[0,3,6,9,12,15,18] # 把x带入,b列表为[a[0:0+3],a[3:3+3]……[a[18:18+3] b=[a[x:x+3] for x in range(0,20,3)] print(a) print(b) 输出为 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1
py3study
2020/01/19
1K0
python遍历列表删除元素与修改元素
如果是修改元素,在遍历时如果想用迭代器对元素进行修改,是不会持久化的,这时候需要使用下标来处理。 像这样: for i in range(len(a)): a[i] += str(i)
看、未来
2021/09/18
1.6K0
Python 列表如何添加元素
添加前: 'my', 'name', 'is', 'mark', 'age', 18
用户8418197
2022/02/13
1.8K0

相似问题

python中列表元素的总和列表,如sql group by

51

如何在python flask中获取html属性,如html元素的类

30

Python -从列表中获取元素

24

python:获取列表中的元素

11

从python列表中获取元素

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文