我班上有几种方法
public class StringChecking
{
public static void main(String[] args);
public void stringChecker(String text, int number); //takes a string and prints that out.
}
我想编写单元测试来测试'stringChecker()
'方法。我想知道我会怎么做。当我在JUnit Testing类中创建类型为StringChecking
的对象时,我似乎无法从该实例访问stringChecker()
方法。
StringChecker方法根据参数打印出传入文本的特定数量的单词。我希望检查打印出的前10个单词是否与预期结果相同。
JUnit测试类
String expected = "My name is";
asserEquals(expected, actual);
我猜我会让我的stringChecker方法返回一些东西,以便进行检查。但我不明白为什么我无法从测试类访问该方法。
答案 0 :(得分:7)
代码更容易测试,如果不是打印数字,方法会将它们返回给调用者。
如果要测试实际打印,可以set a spy object to System.out而不是打印来收集数据。然后你的测试可以断言输出的正确性。
答案 1 :(得分:4)
如果您尝试断言值回来,那么您的方法签名不正确 - 它应该返回String
。从那里,您可以使用JUnit执行常规操作(在此上下文中,您的main
方法没有用处):
@Test
public void checkString() {
String expected = "My name is";
int actual = 3; // assuming words in string
StringChecking testObj = new StringChecking();
assertEquals(expected, testObj.stringChecker(expected + " Bob", 3);
}
仅仅打印输出值无法断言/验证 - 它们提供视觉确认,通常可能不正确或无效。
Java必须知道这些值是什么,最直接的方法是返回所需的值。
这并不是说您永远不会测试void
方法,但在这种情况下,它不合适。