2013-11-19 1 views
0

Я пытаюсь использовать JMockit 1.5 с robolectric 2.2, но я получаю java.lang.NoSuchMethodException, как только я пытаюсь создать Activity. Я уменьшил тест на это:java.lang.NoSuchMethodException с JMockit 1.5 и Robolectric 2.2

@RunWith(RobolectricTestRunner.class) 
//@RunWith(MyTestRunner.class) 
public class Test_login { 
    @Test 
    public void test_login(@Mocked final Intent in) { 
    FragmentActivity frag = Robolectric.buildActivity(MainActivity.class).create().get(); 
    } 
} 

Но я получаю эту трассировку стека:

java.lang.RuntimeException: java.lang.NoSuchMethodException: org.udg.pds.simpleapp_android.roboelectric.Test_login.test_login() 
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:201) 
    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.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:175) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
Caused by: java.lang.NoSuchMethodException: org.udg.pds.simpleapp_android.roboelectric.Test_login.test_login() 
    at java.lang.Class.getMethod(Class.java:1665) 
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:199) 
    ... 19 more 

Я также попытался использовать этот бегун:

public class MyTestRunner extends RobolectricTestRunner { 
    static { Startup.initializeIfPossible(); } 

    public MyTestRunner(Class<?> testClass) throws InitializationError { 
    super(testClass); 
    } 
} 

Но это делает не имеет значения. Я пробовал разные заказы с classpath (jmockit, robolectric, junit) без везения. Как только я пытаюсь использовать @Injectable или @Mocked в тесте, я получаю это исключение. Я прочитал this и this, но это не помогло.

Любой намек на то, где проблема? Thx

ответ

1

A NoSuchMethodException возникает из-за того, что пользовательский тестовый бегун JUnit Robolectric пытается найти метод тестирования без параметров, test_login(), вместо фактического метода тестирования, который имеет параметр.

Обходной путь заключается в использовании ложных полей (объявленных с @Mocked, @Injectable и т. Д. На уровне тестового класса) только, избегая параметров макета.

+0

Спасибо, что сработает !. Во всяком случае, мне интересно, является ли это проблемой robolectric, которая всегда игнорирует параметры в методах тестирования или это проблема сочетания обеих фреймворков. –

+1

После этого исключение уходит, но когда я пытаюсь установить некоторые ожидания, я получил эту ошибку «Недопустимое место для проверки ожиданий». Любой намек? –