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

Может кто-то пролить свет на то, как организовать тесты в тестовых наборах, используя 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) не определен

Что странно, так как я не пытаюсь получить доступ к конструктору, но назову конкретный метод тестирования в классе тестового примера (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(); } } 

И вот класс тестового набора, в который я пытаюсь включить (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; } } 

Solutions Collecting From Web of "Как создать набор тестов для Android, который запускает только определенные тесты в одном или нескольких классах?"

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

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

Для запуска только подмножества тестовых функций ваш метод пакета выглядит следующим образом:

 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, java.lang. String)

Могут добавлять различные тестовые классы:

 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 Unit и функциональных тестов с использованием инструментальной системы. Его документация теперь четко объясняется здесь. Эти ссылки могут помочь вам начать тестирование:

Введение в структуру и все связанные классы:

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

Пример тестирования:

Я нашел обходное решение для достижения того, чего вы хотите.

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