我很难得到这种罕见的组合作品,但我没有运气.我的项目使用JUnit + Mockito + Robolectric进行测试和Roboguice进行注射,当我将PowerMock添加到方程式时发生了奇怪的事情,这是我尝试过的一些事情:
1.-开箱即用的PowerMock + Mockito + Robolectic集成.正如在PowerMockIngration上所建议的那样,我添加了一个@PowerMockRunnerDelegate包括我的自定义运行器,它包括RobolectricGradleTestRunner:
的build.gradle
testCompile 'org.powermock:powermock-module-junit4:1.6.4'
testCompile 'org.powermock:powermock-api-mockito:1.6.4'
Run Code Online (Sandbox Code Playgroud)
测试
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(MyCustomRunner.class)
@Config(constants = BuildConfig.class)
@PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"})
@PrepareForTest(RoboGuice.class)
public class Test {
@Before
public void setUp() throws Exception {
PowerMockito.mockStatic(RoboGuice.class);
....
}
Run Code Online (Sandbox Code Playgroud)
结果:
java.lang.IllegalArgumentException: Cannot subclass final class class roboguice.RoboGuice at org.mockito.cglib.proxy.Enhancer.generateClass(Enhancer.java:447)
at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
at org.mockito.cglib.proxy.Enhancer.createHelper(Enhancer.java:378)
at org.mockito.cglib.proxy.Enhancer.createClass(Enhancer.java:318)
at org.powermock.api.mockito.repackaged.ClassImposterizer.createProxyClass(ClassImposterizer.java:123)
at org.powermock.api.mockito.repackaged.ClassImposterizer.imposterise(ClassImposterizer.java:57)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:111)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:59)
at org.powermock.api.mockito.PowerMockito.mockStatic(PowerMockito.java:70)
at com.humana.vitalityapp.activity.BaseVitalityActivityTest.setUp(BaseVitalityActivityTest.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) …Run Code Online (Sandbox Code Playgroud) 这是我的问题,我有一个活动,其中包含一个使用ViewPager的Fragment(FragmentStatePagerAdapter),当Activity首次加载时,所有工作都很完美,但是当设置setRetainInstance(true)到父片段时(一个)使用寻呼机),以及活动的方向变化,它会导致
java.lang.IllegalStateException:没有活动
在尝试添加已保存的片段时,以下是代码:
活动:
public class DetailActivity{
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.frame_layout_with_progress_container);
...
// However, if we're being restored from a previous state,
// then we don't need to do anything and should return or else
// we could end up with overlapping fragments.
FragmentManager fm = getSupportFragmentManager();
if (savedInstanceState != null) {
Fragment f = fm.findFragmentById(R.id.container);
if(f instanceof DetailPagerFragment){
detailPagerFragment = (DetailPagerFragment) f;
}
}
}
@Override
protected void onPostResume() {
super.onPostResume();
//If fragment is …Run Code Online (Sandbox Code Playgroud) java android android-fragments android-viewpager fragmentstatepageradapter