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

时间:2010-11-16 13:15:54

标签: java android unit-testing

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

因此,一个项目包含模型和逻辑,然后另一个项目包含所述库的测试。没有前端或用户界面,所以我想尽可能地测试我的方法是否都是孤立的。

1 个答案:

答案 0 :(得分: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位于我的android项目MyMainProject内(但该类本身不包含对Android SDK的任何引用)。 SemesterTest位于我的测试项目MyTestProject(一个普通的Java项目)中,MyMainProjectMyTestProject位于同一工作区(并且SemesterTest已经与Semester相同的包名称,我也不需要任何特殊的import语句来引用SemesterMyTestProject也在其构建路径中添加了MyMainProject junit.jar 也被添加到构建路径中,但这种情况会自动发生,至少在Eclipse中我认为)。< / p>

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