2010-11-16 5 views
4

Извините, если это немного расплывчатый вопрос, однако им пытаются найти один твердого примера того, как сделать модульное тестирование (тестирование), изолированным с Android ...Простейший способ модульного тестирования приложения для андроидной библиотеки?

Вот пример того, что я Достигнутые цели:

// Some class 
class Calculator 
{ 
    public int Add(int a, int b) { return a+b; } 
} 


// Simple test 
import org.junit.Assert; 
import org.junit.Test; 

class CalculatorTests 
{ 
    @Test 
    public void should_add_numbers_correctly() 
    { 
     Calculator calculator = new Calculator(); 
     int expectedResult = 5 + 5; 
     int actualResult = calculator.Add(5,5); 
     Assert.assertEqual(actualResult, expectedResult); 
    } 
} 

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

+0

Только что смущает кого-то еще, кажется, что для использования обычного теста тестирования JUnit @Test вам нужно протестировать обычную JVM, поэтому вы в основном проверяете свой код так, как если бы это был J2SE. Однако альтернативный подход, с которым я не мог работать, - это где вы запускаете свои тесты на эмуляторе, а затем вам нужно заменить нагрузку на guff и расширять классы, поскольку она работает с Junit 3, а не 4 ... Эта ссылка помогла мне понять ее намного лучше : http://daverog.wordpress.com/2009/12/14/why-android-isnt-ready-for-tdd-and-how-i-tried-anyway/ – Grofit

ответ

2

Пока ваша «библиотека» не содержит ссылок на ресурсы в Android SDK, для этого нет ничего более важного, чем регулярное тестирование модулей. В рабочем пространстве Eclipse, скажем, у вас есть основной проект MyAndroidLibProject, вы просто создаете новый Java-проект (например, MyAndroidLibProjectUnitTests). Внутри вы создаете обычные модульные тесты со ссылкой на класс Calculator в своем основном проекте (просто убедитесь, что ваш основной проект добавлен в путь сборки вашего тестового проекта).

Вы также можете найти дополнительную информацию в similar question Я спросил себя ранее, а также answer на этот вопрос.

Обновлен пример:

import static org.junit.Assert.*; 
import org.junit.Test; 

public class SemesterTest 
{ 
    @Test 
    public void aNewSemesterShouldHaveANegativeId() 
    { 
     Semester semester = new Semester(2010, SemesterType.FALL); 
     assertEquals(-1, semester.getInternalId()); 
    } 

    @Test 
    public void toStringShouldPrintSemesterTypeAndYear() 
    { 
     Semester semester = new Semester(2010, SemesterType.FALL); 
     assertEquals(SemesterType.FALL + " 2010", semester.toString()); 
    } 

    @Test 
    public void equalityShouldOnlyDependOnSemesterTypeAndYear() 
    { 
     Semester aSemester = new Semester(2010, SemesterType.FALL); 
     aSemester.setInternalId(1); 

     Semester anotherSemester = new Semester(2010, SemesterType.FALL); 
     anotherSemester.setInternalId(2); 

     assertEquals(aSemester, anotherSemester); 
    } 
} 

Вышеуказанное испытание собственного Semester класса (простой класс данных, представляющий семестр). Semester находится внутри моего андроидного проекта MyMainProject (но сам класс не содержит ссылок на Android SDK). SemesterTest находится внутри моего тестового проекта MyTestProject (обычный проекта Java), как с MyMainProject и MyTestProject находятся в одной рабочей области (и так SemesterTest имеет такое же имя пакета Semester, мне не нужен никакой специальный оператор импорта ссылаться Semester либо). MyTestProject также имеет MyMainProject, добавленный к его пути сборки (junit.jar также добавлен в путь сборки, но это происходит автоматически, по крайней мере, в Eclipse, я думаю).

Как вы можете видеть, это не что иное, как полностью обычное единичное испытание (JUnit 4, просто чтобы упомянуть об этом). Надеюсь это поможет.

+0

Im используя IntelliJ X EAP на данный момент, предпочитают IDE для Eclipse. Хотя по какой-то причине попытка использования вышеуказанного кода просто не работает. Убедитесь, что путь к ключу и т. Д. Настроен правильно. – Grofit

+0

Мне также жалуется, что у меня нет файла AndroidManifest.xml, который IDE не создал для меня, и, насколько мне известно, мне не нужно, если я просто использую библиотеку и тест, так как нет активности или действия в проект библиотеки. Во всяком случае, это IDE конкретная и не связана с вопросом, если я могу решить эту проблему и убедиться, что все работает, тогда я буду отмечать вас как ответ – Grofit

+0

@Grofit: у меня нет опыта работы с IntelliJ, поэтому я не могу дать вам какой-то конкретный совет.Однако предпосылка №1 для этого заключается в том, что проект, который вы собираетесь тестировать, настроен и работает правильно. Кроме того, если вы дадите мне пару минут, я обновлю свой ответ конкретным примером модульного теста из своего собственного проекта, просто чтобы показать, что нет ничего особенного. – Nailuj