有关如何使用以下代码编写JUnit测试用例的一些想法将会很有帮助。不确定这是否是一个正确的问题,但是因为我开始学习JUnit并且无法理解从哪里开始。
下面是代码,程序要求用户输入名称并通过删除重复项来输出数据。
public class Q2 {
public void readNames() {
System.out.println("Please enter names seperated by newline, or type esc to stop");
Scanner str = new Scanner(System.in);
Set<String> s = new HashSet<String>();
String word;
while (str.hasNextLine()) {
word = str.nextLine();
if (word != null) {
word = word.trim();
if (word.equalsIgnoreCase("esc")) {
break;
}
s.add(word);
} else {
break;
}
}
System.out.println("The list contains - ");
for (String str1 : s) {
System.out.println(str1);
}
str.close();
}
public static void main(String[] args) {
Q2 answer = new Q2();
answer.readNames();
}
}
答案 0 :(得分:0)
基本上你想参数化方法readNames()
,这样你就可以注入测试它所需的类。
public class Q2 {
public void readNames() {
System.out.println("Please enter names seperated by newline, or type
esc to stop");
Scanner str = new Scanner(System.in);
Set<String> s = new HashSet<String>();
将此更改为:
public class Q2 {
public void readNames( InputStream in ) {
System.out.println("Please enter names seperated by newline, or type
esc to stop");
Scanner str = new Scanner(in);
Set<String> s = new HashSet<String>();
现在,您可以将具有一些测试向量(要读取的单词)的流注入到方法中,以便进行测试。显然,您将对调用该方法的源代码进行一些修改。
答案 1 :(得分:0)
类中的每个方法一次最多只能执行一个任务。你的方法readNames正在做三个任务。
如果将它们分成不同的方法,编写测试会更容易。例如,readNames只应执行数据处理并返回输出。另一种方法应该打印输出。
提出实际问题,如果你有一个具有Set as参数的方法,在你的测试类中,你可以简单地创建一个Q2类的对象,并使用样本数据调用该方法并在return语句中进行断言。