0

我的课堂上有一些方法

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 测试类中创建一个类型的对象时StringChecking,我似乎无法stringChecker()从该实例访问方法。

StringChecker 方法根据参数打印出传入的文本的一定数量的单词。我想检查一下打印出来的前 10 个单词是否与预期的结果相同。

JUnit 测试类

String expected = "My name is";
asserEquals(expected, actual);

我猜我会让我的 stringChecker 方法返回一些东西,以便进行检查。但我不明白为什么我不能从测试类访问该方法。

4

2 回答 2

7

如果方法不是打印数字,而是将它们返回给调用者,那么代码将更容易测试。

如果要测试实际打印,可以将间谍对象设置为 System.out,而不是打印收集数据。然后您的测试可以断言该输出的正确性。

于 2013-10-08T04:38:14.080 回答
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方法,但在这种情况下,它是不合适的。

于 2013-10-08T04:43:06.760 回答