很抱歉,如果这是一个模糊的问题,但我很难找到一个关于如何使用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 :(得分: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项目)中,MyMainProject
和MyTestProject
位于同一工作区(并且SemesterTest
已经与Semester
相同的包名称,我也不需要任何特殊的import语句来引用Semester
。 MyTestProject
也在其构建路径中添加了MyMainProject
( junit.jar 也被添加到构建路径中,但这种情况会自动发生,至少在Eclipse中我认为)。< / p>
正如您所看到的,这只是一个完全普通的单元测试(JUnit 4,只是提到它)。希望这会有所帮助。