Java 从Gradle启动时Robolectric自定义TestRunner不工作
我想实现一个自定义的Java 从Gradle启动时Robolectric自定义TestRunner不工作,java,android,gradle,robolectric,Java,Android,Gradle,Robolectric,我想实现一个自定义的应用程序类阴影,以覆盖其中的getInstance()方法。我正在使用Robolectric 3.0,创建了一个MyRobolectrictTestRunner类,覆盖了createClassLoaderConfig()方法,如下所示: public class MyRobolectricTestRunner extends RobolectricTestRunner { public MyRobolectricTestRunner(Class<?> t
应用程序
类阴影,以覆盖其中的getInstance()
方法。我正在使用Robolectric 3.0,创建了一个MyRobolectrictTestRunner
类,覆盖了createClassLoaderConfig()
方法,如下所示:
public class MyRobolectricTestRunner extends RobolectricTestRunner {
public MyRobolectricTestRunner(Class<?> testClass) throws InitializationError {
super(testClass);
}
@Override
public InstrumentationConfiguration createClassLoaderConfig() {
InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder();
builder.addInstrumentedClass(App.class.getName());
return builder.build();
}
}
@Implements(App.class)
public class ShadowApp{
@RealObject private static App instance;
public static void setAppInstance(App app){
instance = app;
}
@Implementation
public static App getInstance(){
return instance;
}
}
@RunWith(MyRobolectricTestRunner.class)
@Config(manifest=Config.NONE, shadows = {ShadowApp.class}, constants = BuildConfig.class, sdk = 21)
public class SomeShadowTest {
使用转轮的测试注释如下:
public class MyRobolectricTestRunner extends RobolectricTestRunner {
public MyRobolectricTestRunner(Class<?> testClass) throws InitializationError {
super(testClass);
}
@Override
public InstrumentationConfiguration createClassLoaderConfig() {
InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder();
builder.addInstrumentedClass(App.class.getName());
return builder.build();
}
}
@Implements(App.class)
public class ShadowApp{
@RealObject private static App instance;
public static void setAppInstance(App app){
instance = app;
}
@Implementation
public static App getInstance(){
return instance;
}
}
@RunWith(MyRobolectricTestRunner.class)
@Config(manifest=Config.NONE, shadows = {ShadowApp.class}, constants = BuildConfig.class, sdk = 21)
public class SomeShadowTest {
现在的问题是,当我手动运行测试时(仅针对单个测试类点击“run…”),它会顺利通过,但当我使用Gradle“testDebug”任务时,测试失败,就好像根本没有使用影子类一样:(
我曾尝试将Runner父类更改为RobolectricGradeleteStrunner
,但当它迫使我使ShadowApp
类扩展一个ShadowApplication
类时,它也有getInstance()方法,结果陷入了死胡同…:(
关于如何解决此问题的任何提示?我建议您不要为应用程序创建shadow,而是使用TestApplication类,Robolectric将其用作应用程序类的测试变体 为此,您只需要创建一个类,该类扩展了您的应用程序类,并具有名称测试,并且放置在项目的根目录中—类的包和项目的包名称相同 见下例: 假设您的包名是
com.example.roblectric
// src/main/java/com/example/robolectric
public class YourAplication extends Application {
...
}
//src/test/java/com/example/roblectric
/**
*Robolectric使用名为Test的类作为应用程序的测试变体
*我们使用测试应用程序进行API类注入,所以我们需要这个类的测试版本。
*/
公共类TestYourApplication扩展了YourApplication{
...
}
日志中是否有任何可能有用的内容?是否有错误、警告?是否尝试使用--info或--debug运行以获得更详细的输出?此外,如果尝试从AS运行整个套件,而不是仅此一个测试,它是否也能正常工作?