我有两个函数addKeywords和search具有void返回类型,搜索功能将结果打印到控制台。 这是代码
void addKeywords(String video)throws IOException{
InputStreamReader ip = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(ip);
Integer previousVal=0;
if(!videoKeyword.containsKey(video) && videoNames.contains(video)){
videoKeyword.put(video,new HashSet<String>());
}
else if(!videoNames.contains(video)){
System.out.println("Video is not a part of lookup");
}
System.out.println("Enter keywords for video");
String keyword =br.readLine();
if(!keywordLength.containsKey(video))
keywordLength.put(video, 0);
if((keywordLength.get(video)+keyword.length())<500){
videoKeyword.get(video).add(keyword);
previousVal=keywordLength.get(video);
keywordLength.put(video, previousVal+keyword.length());
}
else{
System.out.println("Maximum length exceeded for video "+ video);
}
if(!kewordVideo.containsKey(keyword)){
kewordVideo.put(keyword,new HashSet<String>());
}
kewordVideo.get(keyword).add(video);
}
void search(String searchKey){
for (Entry<String, HashSet<String>> entry : videoKeyword.entrySet()) {
for (String s : entry.getValue()) {
if (s.startsWith(searchKey)) {
System.out.println(searchKey+" is mapped to "+entry.getKey());
break;
}
}
}
}
我写过junit考试
public class MyUnitTest extends CultureMachineAssignment {
CultureMachineAssignment testObj =new CultureMachineAssignment();
testObj.insertDataIntoSet();
testObj.addkeywords("video1");
@Test
public void testVideo() {
assertEquals("video1", testObj.search("abcd"));
}
}
我收到以下错误
Assert类型中的assertEquals(Object,Object)方法不适用于参数 (String,void)
我不确定这是否是为具有void返回类型的函数编写junit测试用例并将输出打印到控制台的正确方法。 有人可以告诉我正确的代码吗?
答案 0 :(得分:2)
您可以使用System.setOut(printStream) and System.setErr(printStream)
函数重定向System.out或System.err消息。
通过这种方式,您可以将System.out消息放入打印流对象中并进行读取。
答案 1 :(得分:1)
您需要以System.out
的形式将PrintStream
传递给类的构造函数,然后再写入它。因此,您可以在单元测试中将自定义流替换为String
并验证它:
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(byteArrayOutputStream);
ps.println("...");
assertEquals("expectedOutput", byteArrayOutputStream.toString())
(您还应该将System.in
作为参数传递给进一步解耦)
正如@kryger指出的那样:您应该将结果作为String
返回,并将打印责任移交给调用者。