使用main方法在Java中编写单元测试

时间:2013-10-08 04:35:14

标签: java unit-testing junit

我班上有几种方法

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方法返回一些东西,以便进行检查。但我不明白为什么我无法从测试类访问该方法。

2 个答案:

答案 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方法,但在这种情况下,它不合适。