как да създадете набор от тестове за роботиум?

с кода по-долу, тестовете не се изпълняват в реда, който бих искал. 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)


както знаем 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); 
} 
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()....

public void test3_other()...

public void test2_mytest()...

и когато ги стартирате, редът ще бъде:

test1_whatever()

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