2

Robolectric を ActionBarSherlock で使用する際に大きな問題があります。

理由はわかりませんが、Robotric は 1 つのクラスを見つけることができないようです:

例外:

java.lang.RuntimeException: java.lang.NoSuchMethodException: android.support.v4.app.Watson.$$robo$$Watson_7e47___constructor__()
    at java.lang.Class.getDeclaredMethod(Class.java:1937)
    at org.robolectric.bytecode.ShadowWrangler$InvocationPlan.callOriginal(ShadowWrangler.java:589)
    at org.robolectric.bytecode.ShadowWrangler.methodInvoked(ShadowWrangler.java:185)
    at org.robolectric.bytecode.RobolectricInternals.methodInvoked(RobolectricInternals.java:118)
    at android.support.v4.app.Watson.__constructor__(Watson.java)
    at android.content.Context.<init>(Context.java)
    at android.content.ContextWrapper.<init>(ContextWrapper.java)
    at android.view.ContextThemeWrapper.<init>(ContextThemeWrapper.java)
    at android.app.Activity.<init>(Activity.java)
    at android.support.v4.app.FragmentActivity.<init>(FragmentActivity.java)
    at android.support.v4.app.Watson.<init>(Watson.java)
    at com.actionbarsherlock.app.SherlockFragmentActivity.<init>(SherlockFragmentActivity.java:21)
    at pl.activities.CoreFragmentMenuActivity.<init>(CoreFragmentMenuActivity.java:21)
    at pl.activities.CoreNavigationActivity.<init>(CoreNavigationActivity.java:16)
    at pl.activities.MainActivity.<init>(MainActivity.java:18)
    at MainActivityTest.setUp(MainActivityTest.java:20)

テストクラス:

@RunWith(CustomTestRunner.class)
public class MainActivityTest
{
    private MainActivity activity;
    private Button pressMeButton;
    private TextView results;

    @Before
    public void setUp() throws Exception
    {
        activity = new MainActivity();
        activity.onCreate(null);

    }

    @Test
    public void shouldUpdateResultsWhenButtonIsClicked() throws Exception
    {
        Assert.assertEquals(activity.getTitle(), activity.getResources().getString(R.string.activity_main_title));
    }
}

CustomTestRunner:

import java.io.File;

public class CustomTestRunner extends RobolectricTestRunner
{
    public CustomTestRunner(Class<?> testClass) throws InitializationError
    {
        super(RobolectricContext.bootstrap(CustomTestRunner.class, testClass,
                new RobolectricContext.Factory()
                {
                    @Override
                    public RobolectricContext create()
                    {
                        return new RobolectricContext()
                        {
                            //http://stackoverflow.com/questions/15603583/impossible-runtimeexception-stub-with-robolectric
                            @Override
                            public boolean useAsm() // this override does the trick
                            {
                                return false;
                            }

                            @Override
                            protected AndroidManifest createAppManifest()
                            {
                                return new AndroidManifest(
                                        new File("AndroidManifest.xml"),
                                        new File("res"));
                            }
                        };
                    }
                }));
    }

私は使っている:

<dependency>
         <groupId>org.robolectric</groupId>
         <artifactId>robolectric</artifactId>
         <version>2.0-alpha-2</version>
         <scope>test</scope>
</dependency>

誰かが同様の問題を抱えていましたか?

4

1 に答える 1

0

あなたがまだそれに遭遇したかどうかはわかりませんが、Robolectric は ABS との互換性に関するブログ投稿をリリースしました。それをチェックしてください。うまくいけば、それはあなたの問題を解決します。

于 2013-05-29T02:41:49.007 に答える