2012-07-09 120 views
2

没有检测到我试图用robotium运行以下的Android JUnit3测试:Android的JUnit测试中Robotium

import android.test.ActivityInstrumentationTestCase2; 
import com.package.sample.MyActivityClass; 
import com.jayway.android.robotium.solo.Solo; 

public class TestSample extends ActivityInstrumentationTestCase2<MyActivityClass> { 
    private Solo solo; 
    public TestSample() { 
     super("com.package.sample", MyActivityClass.class); 
    } 

    protected void setUp() throws Exception { 
     super.setUp(); 
     solo = new Solo(getInstrumentation(), getActivity()); 
    } 

    public void clickbutton1() throws Exception{ 
     solo.clickOnButton("abc"); 
     solo.setActivityOrientation(Solo.LANDSCAPE); 
     assertTrue(solo.searchText("load")); 
    } 

    @Override 
    protected void tearDown() throws Exception{ 
     solo.finishOpenedActivities(); 
    } 
} 

JUnit的探索表明0/0的测试运行。调试器不打这里提到的任何代码路径和控制台输出“试运行完成” ??:

Uploading MyAppTest.apk onto device 'emulator-5554' 
Installing MyAppTest.apk... 
Success! 
Project dependency found, installing: MyApp 
Uploading MyApp.apk onto device 'emulator-5554' 
Installing MyApp.apk... 
Success! 
Launching instrumentation android.test.InstrumentationTestRunner on device emulator-5554 
Collecting test information 
Sending test information to Eclipse 
Running tests... 
Test run finished 

有没有人有一个想法,什么是错的?我虔诚地遵循robotium教程中的所有步骤。我知道这附近有很多问题,但我已经解决了所有问题。

另外Robotium也有与JUnit4 here类似的问题。

+0

我正在使用Android 2.3.3 [API 10],Junit3,Robotium 3.2.1 – Alphafa 2012-07-09 07:00:00

+0

有问题。 Junit3出于某种愚蠢的原因(愚蠢,因为它在文档中未明确提及)期望测试用例名称包含“test *”前缀。 – Alphafa 2012-07-10 10:51:00

+0

花了我几天的时间才弄清楚。我实际上不得不联系创建它的人来弄清楚。你会认为他们会在他们的文档中提到,但他们不会。 – BlackHatSamurai 2012-07-11 23:44:18

回答

3

是的,我知道什么是错的。

为了运行测试,您需要使用test开始测试。所以,你的代码应该是这样的:

import android.test.ActivityInstrumentationTestCase2; 
import com.package.sample.MyActivityClass; 
import com.jayway.android.robotium.solo.Solo; 

public class TestSample extends ActivityInstrumentationTestCase2<MyActivityClass> { 
    private Solo solo; 
    public TestSample() { 
     super("com.package.sample", MyActivityClass.class); 
    } 

    protected void setUp() throws Exception { 
     super.setUp(); 
     solo = new Solo(getInstrumentation(), getActivity()); 
    } 

    //the test methods MUST begin with test... 
    public void testClickbutton1() throws Exception{ 
     solo.clickOnButton("abc"); 
     solo.setActivityOrientation(Solo.LANDSCAPE); 
     assertTrue(solo.searchText("load")); 
    } 

    @Override 
    protected void tearDown() throws Exception{ 
     solo.finishOpenedActivities(); 
    } 
} 

我有一个类似的问题前一段时间,并Robotium不会有最大的文档。我希望这可以帮助你:)

+0

+1对我有很大的帮助。但是还有一个问题, Eclipse给我这样的错误:'java.lang.NoClassDefFoundError:com.jayway.android.robotium.solo.Solo at com.MAT.CanadaImmigrationApp.test .SettingTest.setUp在android.test.InstrumentationTestRunner(SettingTest.java:19) 在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) 在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) .onStart(InstrumentationTestRunner.java:529) at android.app.Instrumentation $ InstrumentationThread.run(Instrumentation.java:1448) ' – 2013-02-13 04:25:26

+0

如果您发布一个新问题和您的代码会更好。 – BlackHatSamurai 2013-02-13 05:11:19

+0

请检查这里http://stackoverflow.com/questions/14846555/java-lang-noclassdeffounderror-com-jayway-android-robotium-solo-solo – 2013-02-13 05:32:13

1

我做的一切都是你说的话,但我仍然有错误有0/0 test.I已经找到了解决办法,这是关系到构造函数:

// I DELETED THIS CONSTRUCTOR 
public TestHomeScreenTest(String pkg, Class<ScreenSlidePagerActivity> activityClass) { 
    super(pkg, activityClass); 
} 


//GOOD SOLUTION:  
public TestHomeScreenTest() { 
    super("com.dolphin.homescreen", ScreenSlidePagerActivity.class); 
} 

和它现在WOOORKS! :)