Robolectric3:影子风俗class
Robolectric 3: Shadow custom class
我正在使用 Robolectric 3,我正在尝试像这样隐藏自定义 class:
public class Yakir {
public int foo() {
return 1;
}
}
@Implements(Yakir.class)
public class TestYakir {
@Implementation
public int foo() {
return 2;
}
}
而且我已经阅读了 Robolectric 影子 SDK classes 和自定义 classes 的其他答案和帖子,我需要做一些特别的事情,例如:
public class RoboServiceRunner 扩展 RobolectricGradleTestRunner {
public RoboServiceRunner(Class<?> klass) throws InitializationError {
super(klass);
}
@Override
public Config getConfig(Method method) {
Config config = super.getConfig(method);
config.shadows();
return config;
}
@Override
protected ShadowMap createShadowMap(){
ShadowMap shadowMap = super.createShadowMap();
shadowMap = shadowMap.newBuilder().addShadowClass(ServiceTest.TestYakir.class).build();
return shadowMap;
}
}
所以您在这里看到的是将新 class 添加到 shadowMap 的代码。
我也知道 Shadows class 但我找不到如何处理它。
所以这个测试的输出:
@RunWith(RoboServiceRunner.class)
@Config(constants = BuildConfig.class, shadows = {ServiceTest.TestYakir.class})
public class ServiceTest {
@Test
@Config(constants = BuildConfig.class, shadows = {ServiceTest.TestYakir.class})
public void testService() {
assertEquals(2, new Yakir().foo());
}
是:
junit.framework.AssertionFailedError:
Expected :2
Actual :1
谢谢!
因此,在网上进行更多挖掘后,我找到了一个适合我的简单解决方案。
您需要做的就是重写 class 中扩展
的方法
RobolectricGradleTestRunner
方法是:
@Override
public InstrumentationConfiguration createClassLoaderConfig() {
InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder();
builder.addInstrumentedClass(YourCustomShadowClass.class.getName());
return builder.build(); }
就是这样!测试顺利通过 :)
我正在使用 Robolectric 3,我正在尝试像这样隐藏自定义 class:
public class Yakir {
public int foo() {
return 1;
}
}
@Implements(Yakir.class)
public class TestYakir {
@Implementation
public int foo() {
return 2;
}
}
而且我已经阅读了 Robolectric 影子 SDK classes 和自定义 classes 的其他答案和帖子,我需要做一些特别的事情,例如:
public class RoboServiceRunner 扩展 RobolectricGradleTestRunner {
public RoboServiceRunner(Class<?> klass) throws InitializationError {
super(klass);
}
@Override
public Config getConfig(Method method) {
Config config = super.getConfig(method);
config.shadows();
return config;
}
@Override
protected ShadowMap createShadowMap(){
ShadowMap shadowMap = super.createShadowMap();
shadowMap = shadowMap.newBuilder().addShadowClass(ServiceTest.TestYakir.class).build();
return shadowMap;
}
}
所以您在这里看到的是将新 class 添加到 shadowMap 的代码。 我也知道 Shadows class 但我找不到如何处理它。
所以这个测试的输出:
@RunWith(RoboServiceRunner.class)
@Config(constants = BuildConfig.class, shadows = {ServiceTest.TestYakir.class})
public class ServiceTest {
@Test
@Config(constants = BuildConfig.class, shadows = {ServiceTest.TestYakir.class})
public void testService() {
assertEquals(2, new Yakir().foo());
}
是:
junit.framework.AssertionFailedError: Expected :2 Actual :1
谢谢!
因此,在网上进行更多挖掘后,我找到了一个适合我的简单解决方案。
您需要做的就是重写 class 中扩展
的方法RobolectricGradleTestRunner
方法是:
@Override
public InstrumentationConfiguration createClassLoaderConfig() {
InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder();
builder.addInstrumentedClass(YourCustomShadowClass.class.getName());
return builder.build(); }
就是这样!测试顺利通过 :)