如何使用JUnit测试void方法。
void add(int a, int b) {
int c= a + b;
}
如何在Java中使用Junit测试上述方法。
答案 0 :(得分:15)
如果方法有副作用,您可以在JUnit测试中检查它们。
在您的示例中,该方法没有副作用,因此无需测试。
如果您仍想测试它,可以使用反射来实现,但我认为这不是好习惯。
您可以查看JUnit FAQ相关部分:
如何测试不返回任何内容的方法?
通常,如果方法不返回值,则会产生一些副作用。实际上,如果它没有返回值并且没有副作用,它就没有做任何事情。
可能有一种方法可以验证副作用是否按预期实际发生。例如,考虑
add()
类中的Collection
方法。有方法可以验证副作用是否发生(即添加了对象)。您可以检查大小并断言它是预期的:@Test public void testCollectionAdd() { Collection collection = new ArrayList(); assertEquals(0, collection.size()); collection.add("itemA"); assertEquals(1, collection.size()); collection.add("itemB"); assertEquals(2, collection.size()); }
另一种方法是使用MockObjects。
相关问题是设计测试。例如,如果您有一个要输出到文件的方法,请不要传入文件名,甚至是
FileWriter
。相反,传入Writer
。这样,您可以传入StringWriter
来捕获输出以进行测试。然后,您可以添加一个方法(例如writeToFileNamed(String filename)
)来封装FileWriter
创建。
答案 1 :(得分:0)
如果它是一个“大”的方法,你可以从中提取一些Extract Method重构,以便有几个可测试的方法进行测试。
或者,正如whoAmI所说,你可以测试副作用:数据库修改,文件修改,......
答案 2 :(得分:-4)
假设您的班级名称为Addition
,
@Test
public void testAdd(){
Addition a = new Addition();
assertEquals(a.add(2,3),5);
}
来自JUnit's FAQ:
通常,如果方法不返回值,则会产生一些副作用。实际上,如果它没有返回值并且没有副作用,它就没有做任何事情。