java – 单元测试android库应用程序的最简单方法?

很抱歉,如果这是一个模糊的问题,但我很难找到一个关于如何使用
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);
    }   
}

因此,一个项目包含模型和逻辑,然后另一个项目包含所述库的测试.没有前端或用户界面,所以我想做到最低限度,以便能够测试我的方法都是孤立的.

最佳答案 只要您的“库”不包含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类(一个代表一个学期的简单数据类)的测试.学期位于我的android项目MyMainProject内(但该类本身不包含对Android SDK的任何引用). SemesterTest位于我的测试项目MyTestProject(一个普通的Java项目)中,MyMainProject和MyTestProject都在同一个工作区中(因为SemesterTest与Semester具有相同的包名,所以我不需要任何特殊的import语句来引用Semester ). MyTestProject还将MyMainProject添加到其构建路径中(junit.jar也被添加到构建路径中,但这会自动发生,至少在Eclipse中我认为).

正如您所看到的,这只是一个完全普通的单元测试(JUnit 4,只是提到它).希望这可以帮助.

点赞