3

以下のコードでは、テストが希望する順序で実行されません。test_homescreen は、test_splashscreen の前に実行されます。

実行するテストとその実行順序を指定したいと思います。テストスイートを作成する必要があると思いますが、それを実装する方法がわかりません。

package com.myapp.test;
import com.jayway.android.robotium.solo.Solo;
import android.test.ActivityInstrumentationTestCase2;
import com.myapp.R;

public class myTest extends ActivityInstrumentationTestCase2{

    private static final String TARGET_PACKAGE_ID="com.myapp.test";
    private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME="com.myapp.gui.SplashScreen";
    private static Class launcherActivityClass;
    static{
        try
        {
            launcherActivityClass=Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
        } catch (ClassNotFoundException e){
            throw new RuntimeException(e);
        }
    }
    public myTest ()throws ClassNotFoundException{
        super(TARGET_PACKAGE_ID,launcherActivityClass);
    }
    private Solo solo;

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

    public void test_splashscreen() throws InterruptedException {
        TextView splashAppVersion = (TextView) solo.getView(R.id.AppVersion); 
        assertTrue(splashAppVersion.isShown());     
    }

    public void test_homescreen() throws InterruptedException {
        ListView lv = (ListView) solo.getView(R.id.List);
        assertTrue(lv.isShown());
        }   

    @Override
    public void tearDown() throws Exception {
        try { 
            solo.finishOpenedActivities();    
        } catch (Throwable e) { 
            e.printStackTrace(); 
        }       
        super.tearDown(); 
    }       
}
  1. 最初に test_splashscreen() を実行し、次に test_homescreen() を実行します

  2. test_homescreen() のみを実行

この投稿は私が望むものに近いようですが、利用できませんでした。一般的すぎる。Android Robotium - テストケースの実行順序を管理するには?

4

3 に答える 3

3

ご存知のように、robotium はテスト ケースをアルファベット順に実行します。したがって、より良い結果を得るために、個別のアクティビティに対して個別のテスト ケースを用意できます。後で、そのアクティビティに関連する他のテスト ケースを同じパッケージに保持できます (別のアクティビティには別のパッケージを保持します)。これは、同じアクティビティのテスト ケースを一緒に実行するのに役立ちます。テストの順序を変更するために、テスト ケースに名前を付けるときにいつでもアルファベットで遊ぶことができます。例: 「testAddSplash」は「testHomeScreen」の前に実行されます。

メソッドを使用することもできますsuite()

public static final Test suite()
{ 
                TestSuite testSuite = new TestSuite(); 
                testSuite.addTest(new MyTestCase("test1")); 
                testSuite.addTest(new MyTestCase("test2")); 
                return testSuite; 
} 

テスト ケースには、引数なしのコンストラクターと、次のような文字列パラメーターを持つコンストラクターが必要です。

public MyTestCase(String name)
{ 
            setName(name); 
} 
于 2012-10-31T12:45:29.767 に答える
1

まず、特定の順序で実行されているテストに依存するのは悪いことです。次々に実行する必要がある場合は、なぜテストを分離するのかを自問する必要があります。前のテストの状態に依存している場合、前のテストで失敗すると、次のテストが失敗します。

そうは言っても、あなたはおそらく私が気にしないと言っているでしょう。私はこれを機能させたいだけです。だからあなたのために私はとにかくあなたに答えを与えるでしょう。もちろん、他の人が言っているように、アルファベット順に実行するようにテストの名前を変更することもできます。しかし、あなたはより高いレベルの制御を望んでいるように思われるので、ここにそれがあります:

import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTests {
    public static Test suite() {
        TestSuite suite = new TestSuite(AllTests.class.getName());
        suite.addTest(TestSuite.createTest(myTest.class, "test_splashscreen"));
        suite.addTest(TestSuite.createTest(myTest.class, "test_homescreen"));
        suite.addTest(TestSuite.createTest(myTest.class, "test_splashscreen"));
        return suite;
    }
}

テスト名を文字列として指定する必要があるため、これには多くの問題があります。そのため、テスト名をリファクタリングすると、スイートが機能しなくなります(さらに、他の多くの理由もあります)。通常、テストスイートは、テストのクラスを1回の実行でグループ化するためによく使用されます。

于 2012-11-01T18:39:47.747 に答える
0

次のようにテスト ケースに名前を付けることができます。

public void test1_whatever()....

public void test3_other()...

public void test2_mytest()...

それらを実行すると、順序は次のようになります。

test1_whatever()

test2_mytest()

test3_other()

于 2012-11-01T15:33:27.650 に答える