Как создать Android Test suite, который выполняет только определенные тесты в одном или нескольких классах?



Может ли кто - нибудь пролить свет на то, как организовать тесты в тестовых наборах, используя JUnit в Android? Я нахожу, что почти все примеры не работают, и мне интересно, что именно я не получаю.



Я сделал небольшой пример с классом AndroidTestCase, содержащим пару тестов и набор тестов, который включает все тесты в пакете. Это работает (по-видимому):



Класс тестового случая, содержащий тесты:



public class ArithmeticsTest extends AndroidTestCase {
SomeClass sctest;

protected void setUp () throws Exception {
sctest = new SomeClass();
super.setUp();
}


/* Test the SomeClass.addNumbers (int, int) method: */
public void testAddNumbers () {
assertEquals(9, sctest.addNumbers(3, 6));
}

/* Test the SomeClass.addNumbers (int, int) method: */
public void testSubtractNumbers () {
assertEquals(2, sctest.subtractNumbers(6, 4));
}


protected void tearDown () throws Exception {
super.tearDown();
}
}


Класс набора тестов, включающий все тесты в упаковке:



import junit.framework.Test;
import android.test.suitebuilder.TestSuiteBuilder;

public class ProjectTestSuite_AllTests {
public static Test suite () {
return new TestSuiteBuilder(ProjectTestSuite_AllTests.class)
.includeAllPackagesUnderHere()
.build();
}
}


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



Я видел примеры на этот счет, но я никого не заставлял работать. У кого-нибудь есть хороший пример? То есть новый набор тестов, который включает в себя конкретные тестовые случаи из одного или нескольких классов тестовых случаев.



Обновление:



Работают следующие два примера:



Выполните все тесты в пакете:



public static Test suite () {
return new TestSuiteBuilder(ProjectTestSuite_AllTests.class)
.includeAllPackagesUnderHere()
.build();
}


Выполните все тесты в определенном классе тестов (класс AndroidTestCase):



public static Test suite () {
Class testClass = ArithmeticsTests.class;
TestSuite suite = new TestSuite(testClass);

return suite;
}


Однако это не работает:



public static Test suite () {
TestSuite suite= new TestSuite();
suite.addTest(new ArithmeticsTest("testAddNumbers"));
suite.addTest(new ArithmeticsTest("testSubtractNumbers"));

return suite;
}


Последний (нерабочий) пример из developer.android.com ошибка, которую я получаю при попытке сделать это:




Конструктор ArithmeticsTests (String) является неопределенный




Что странно, так как я не пытаюсь получить доступ к конструктору, а называю конкретный метод тестирования в классе test case (testAddNumbers).



Обновление янв. 11:



Вот класс тестового случая, содержащий несколько тестов:



public class ArithmeticsTests extends AndroidTestCase {
SomeClass sctest;

protected void setUp () throws Exception {
sctest = new SomeClass();
super.setUp();
}

public void testAddNumbers () {
assertEquals(9, sctest.addNumbers(3, 6));
}

public void testSubtractNumbers () {
assertEquals(2, sctest.subtractNumbers(6, 4));
}

protected void tearDown () throws Exception {
super.tearDown();
}
}


А вот класс test suite, в который я пытаюсь включить (F. ex.) Одно из испытаний в вышеуказанном классе:



public class ProjectTestSuite_SomeTests {

public static Test suite () {
// This does not work:
TestSuite suite= new TestSuite();
suite.addTest(new ArithmeticsTests("testAddNumbers"));
return suite;
}
}


Строка addTest выше приводит к этой ошибке:




Конструктор ArithmeticsTests (String) не определен




Вот файл SomeClass, который я пытаюсь протестировать в этом примере:



public class SomeClass {

int classInt;
String classString;
Item item;

public SomeClass () {}

public SomeClass (int ci, String cs) {
this.classInt = ci;
this.classString = cs;
}

public int addNumbers (int num1, int num2) {
return num1+num2;
}

public int subtractNumbers (int num1, int num2) {
return num1-num2;
}
}
548   4  

4 ответов:

Проблема AFAIK заключается в том, что класс AndroidTestCase имеет только один конструктор-AndroidTestCase ()

Указание тестовых случаев с помощью строки поддерживается только классом TestCase JUnit, но не AndroidTestCase (). Вот почему вы столкнулись с этой проблемой.

Чтобы запустить только подмножество тестовых функций, сделайте свойsuite метод следующим образом:

public static Test suite () {
    final TestSuite suite = new TestSuite();
    suite.addTest(TestSuite.createTest(ArithmeticsTests.class, "testAddNumbers"));
    suite.addTest(TestSuite.createTest(ArithmeticsTests.class, "testSubtractNumbers"));
    // add some more tests here or comment out one of the lines above
    // if you want to skip a particular test
    return suite;
}

МетодcreateTest не кажется хорошо документированным, но он работает для меня: http://developer.android.com/reference/junit/framework/TestSuite.html#createTest(java.lang.Class Ява.яз..Строка)

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

Class[] testClasses = { MathTest.class, AnotherTest.class }
TestSuite suite= new TestSuite(testClasses);

 TestSuite suite= new TestSuite();
 suite.addTest(new MathTest("testAdd"));
 suite.addTest(new MathTest("testDivideByZero"));

 TestSuite suite= new TestSuite(MathTest.class);

Ссылка

С помощью модульных и функциональных тестов Android с использованием инструментария. Его документация теперь ясно объяснена здесь, эти ссылки могут помочь вам начать тестирование:

Введение в фреймворк и все связанные с ним классы:

Список этих классов:

Пример того, как тестировать действия:

Я нашел обходной путь, чтобы достичь того, что вы хотите.

Проверьте это: Android TestSuite: включить все тестовые наборы, кроме некоторых явно определенных

Comments

    Ничего не найдено.