2014-04-11 117 views
1

嗨,每次我收到此异常跟踪与Robolectric定制阴影工作Robolectric自定义阴影代码

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
    at org.robolectric.bytecode.RobolectricInternals.newInstanceOf(RobolectricInternals.java:33) 
    at org.robolectric.Robolectric.newInstanceOf(Robolectric.java:345) 
    at org.robolectric.shadows.ShadowBitmapFactory.create(ShadowBitmapFactory.java:120) 
    at org.robolectric.shadows.ShadowBitmapFactory.decodeFile(ShadowBitmapFactory.java:72) 
    at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java) 

什么我做的是我有一个自定义阴影

@Implements(Bitmap.class) 
class MyShadowBitmap extends org.robolectric.shadows.ShadowBitmap { 

    public MyShadowBitmap() { 
     // can also be some other config value 
     setConfig(Bitmap.Config.ARGB_8888); 
    } 

} 

一会儿,我使用这个类

public class CustomTestRunner extends RobolectricTestRunner { 
    public CustomTestRunner(Class<?> testClass) throws InitializationError { 
     super(testClass); 
    } 
    @Override 
     public Setup createSetup() { 
      return new MySetup(); 
     } 
    @Override 
    protected ShadowMap createShadowMap() { 
     return super.createShadowMap() 
       .newBuilder() 
       .addShadowClass(MyShadowBitmap.class) 

       .build(); 
    } 
    } 
} 

而且我运行我的测试案例

@Test 
    @Config(shadows = { 
     MyShadowBitmap.class 
    }) 

请帮助我,我做错了,如何使用robolectric中的自定义阴影!

+0

你解决了吗?如果是这样,请选择一个答案。 –

回答

1

我是很新,robolectric自己,但我认为你需要以不同的定义阴影的构造,如:

public void __constructor__(),而不是通常的public MyShadowBitmap()

在这里看到: http://robolectric.org/extending/Shadowing构造函数部分)

1

我在Robolectric上也很新,但是我制作了一个shadowImageView。你可能对这个代码来看看: https://github.com/jiahaoliuliu/RobolectricSample/tree/roboMockitoTutorial

错误,你应该修正:

  1. 你可能有,而不是考过类的声明的配置。
  2. 所有阴影方法应该有@implementation符号
  3. 的构造不能阴影

这里是我的影子类的代码,从Robolectric网页中提取:

package com.jiahaoliuliu.robolectricsample; 

import android.graphics.Bitmap; 
import org.robolectric.annotation.Implementation; 
import org.robolectric.annotation.Implements; 
import org.robolectric.annotation.RealObject; 
import org.robolectric.shadows.ShadowBitmap; 

import java.io.OutputStream; 

/** 
* Created by jiahao on 2/15/15. 
*/ 
@Implements(Bitmap.class) 
public class MyShadowBitmap extends ShadowBitmap { 
    @RealObject 
    private Bitmap realBitmap; 
    private int bitmapQuality = -1; 

    @Implementation 
    public boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream) { 
     bitmapQuality = quality; 
     System.out.println("Using the shadow to compress"); 
     return true; 
    } 
} 

祝你好运!