как создать тестовый набор для роботиума?

с приведенным ниже кодом тесты выполняются не в том порядке, в котором я хотел бы. 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 - Как управлять порядком выполнения тестовых случаев?


person Franck    schedule 31.10.2012    source источник


Ответы (3)


как мы знаем, роботиум запускает тестовые случаи в алфавитном порядке. Таким образом, для лучшего результата мы можем иметь отдельные тестовые случаи для отдельных действий. Позже другие тестовые случаи, связанные с этим действием, можно будет хранить в том же пакете (сохраняйте отдельный пакет для отдельного действия). это поможет в совместном запуске тестовых случаев одного и того же действия. Для изменения порядка тестов вы всегда можете поиграть с алфавитами при именовании тестовых случаев. например: "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); 
} 
person kamal_prd    schedule 31.10.2012
comment
Я больше спрашивал о том, как реализовать набор тестов, перечисляя конкретные тесты и порядок их выполнения. Иначе какой смысл делать набор тестов? - person Franck; 31.10.2012

Во-первых, полагаться на тесты, выполняемые в определенном порядке, — это плохо. Если они требуют, чтобы один запускался за другим, вы должны спросить себя, почему они вообще являются отдельными тестами? Если они полагаются на предыдущие тесты, заявите, что любой сбой в предыдущем тесте приведет к сбою следующих.

Теперь, сказав это, вы, вероятно, скажете, что мне все равно, я просто хочу, чтобы это работало. Так что для вас я дам вам ответ в любом случае. Конечно, вы можете сделать, как сказали другие, и переименовать свои тесты, чтобы они выполнялись в алфавитном порядке. Но вы, кажется, хотите большего уровня контроля, так что вот он:

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;
    }
}

Это имеет много проблем, потому что вы должны указать имя теста в виде строки, поэтому, если вы рефакторите имя теста, ваш набор сломается (и множество других причин, если на то пошло). Обычно набор тестов больше используется для группировки классов тестов за один запуск.

person Paul Harris    schedule 01.11.2012

вы можете назвать свои тестовые примеры следующим образом:

public void test1_whatever()....

публичная пустота test3_other()...

публичная пустота test2_mytest()...

и когда вы запустите их, порядок будет таким:

test1_что угодно()

test2_mytest()

test3_other()

person gionnut    schedule 01.11.2012
comment
Это очень слабое разрешение, потому что оно работает, только если у вас меньше 11 тестов. Тесты выполняются в алфавитном порядке, поэтому test13_ сработает раньше test7_ - person Paweł Byszewski; 26.02.2014
comment
используйте 0 перед каждым номером: test007_ и test013_ и он будет работать по порядку - person gionnut; 04.03.2014