Android-библиотека JUnit Test с Robolectric: java.lang.InstantiationException

При попытке запустить JUnit-тест в проекте библиотеки Android с Robolectric я получаю следующую ошибку:

java.lang.RuntimeException: java.lang.InstantiationException at com.xtremelabs.robolectric.ApplicationResolver.newApplicationInstance(ApplicationResolver.java:56) at com.xtremelabs.robolectric.ApplicationResolver.resolveApplication(ApplicationResolver.java:36) at com.xtremelabs.robolectric.RobolectricTestRunner.createApplication(RobolectricTestRunner.java:246) at com.xtremelabs.robolectric.RobolectricTestRunner.setupApplicationState(RobolectricTestRunner.java:233) at com.xtremelabs.robolectric.RobolectricTestRunner.internalBeforeTest(RobolectricTestRunner.java:177) at com.xtremelabs.robolectric.RobolectricTestRunner.methodBlock(RobolectricTestRunner.java:157) at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.lang.InstantiationException at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at com.xtremelabs.robolectric.ApplicationResolver.newApplicationInstance(ApplicationResolver.java:54) ... 20 more 

Моя первая идея заключалась в том, что я допустил ошибку в тесте, поэтому я максимально упростил тестовый прогон:

 import static org.junit.Assert.*; import org.junit.Test; import org.junit.runner.RunWith; import com.xtremelabs.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class CommonDataTest { @Test public void test(){ assertTrue(true); } } 

Но я все равно получаю ту же ошибку. Я создал проект, как описано здесь: http://robolectric.org/eclipse-quick-start/ Странно, что он работал с другими проектами библиотеки Android без каких-либо проблем.

Любая помощь будет оценена! Заранее спасибо!

Казалось, что Robolectric не смог создать приложение из моей библиотеки, поэтому я заменил TestRunner:

 import org.junit.runners.model.InitializationError; import android.app.Application; import com.xtremelabs.robolectric.RobolectricTestRunner; public class MyTestRunner extends RobolectricTestRunner { public MyTestRunner(Class<?> testClass) throws InitializationError { super(testClass); } @Override protected Application createApplication() { return new Application() { }; } } 

И использовал его вместо RobolectricTestRunner:

 @RunWith(MyTestRunner.class) 

Теперь тесты работают корректно.

Intereting Posts