Android 机器人自定义阴影码

Android 机器人自定义阴影码,android,robolectric,Android,Robolectric,嗨,每次我在处理自定义阴影时,都会通过Robolectric获得此异常跟踪 java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at org.robolectric.bytecode.RobolectricInternals.newInstanceOf(RobolectricInternals.java:33) at org.robolectric.Robolectric.newInsta

嗨,每次我在处理自定义阴影时,都会通过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();
    }
    }
}

请帮助我,我哪里做错了,以及如何在robolectric中使用自定义阴影

我自己对robolectric很陌生,但我认为需要以不同的方式定义阴影的构造函数,如:

public void\uuuu构造函数
,而不是通常的
public MyShadowBitmap()

请看这里:
阴影构造器部分)

我对Robolectric也很陌生,但我制作了一个有效的阴影图像视图。您可以查看以下代码:

您应该修复的错误:

  • 您可以在类的声明上使用配置,而不是测试
  • 所有隐藏的方法都应该有@Implementation符号
  • 构造函数不能被隐藏
  • 以下是我的Shadow类的代码,摘自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;
        }
    }
    

    祝你好运

    你解决了这个问题吗?如果是,请选择一个答案。
    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;
        }
    }