java.lang.NoSuchMethodException dengan JMockit 1.5 dan Robolectric 2.2

Saya mencoba menggunakan JMockit 1.5 dengan Robolectric 2.2 tetapi saya mendapatkan Java.lang.NoSuchMethodException segera setelah saya mencoba membuat Aktivitas. Saya telah mengurangi tesnya menjadi ini:

@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();
  }
}

Tapi saya mendapatkan jejak tumpukan ini:

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

Saya juga mencoba menggunakan pelari ini:

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

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

Tapi itu tidak membuat perbedaan. Saya telah mencoba perintah berbeda dengan classpath (jmockit, robolectric, junit) tetapi tidak berhasil. Segera setelah saya mencoba menggunakan @Injectable atau @Mocked dalam pengujian saya mendapatkan pengecualian ini. Saya telah membaca ini dan ini tetapi tidak membantu.

Adakah petunjuk di mana masalahnya? Terima kasih


person Ignacio Martin    schedule 19.11.2013    source sumber


Jawaban (1)


NoSuchMethodException terjadi karena pelari pengujian JUnit kustom Robolectric mencoba mencari metode pengujian tanpa parameter, test_login(), alih-alih metode pengujian sebenarnya yang memiliki parameter.

Solusinya adalah dengan menggunakan bidang tiruan (dideklarasikan dengan @Mocked, @Injectable, dll. di tingkat kelas pengujian) saja, dengan menghindari parameter tiruan.

person Rogério    schedule 20.11.2013
comment
Terima kasih, itu akan berhasil!. Bagaimanapun, saya bertanya-tanya apakah ini adalah masalah robotik yang selalu mengabaikan parameter dalam metode pengujian, atau ini merupakan masalah kombinasi kedua kerangka kerja. - person Ignacio Martin; 20.11.2013
comment
Setelah mencoba ini, pengecualiannya hilang, tetapi ketika saya mencoba menetapkan beberapa Harapan, saya mendapatkan kesalahan ini Tempat yang tidak valid untuk memverifikasi harapan. Ada petunjuk? - person Ignacio Martin; 20.11.2013