[英]java junit test case for the class
我的程序如下:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.regex.Pattern;
public class MangoDemo
{
public static void main(String[ ] args) throws FileNotFoundException
{
output();
}
public static void output() throws FileNotFoundException{
char[] lineChar = null;
Scanner scanner = new Scanner(new File("src/input.txt"));
while(scanner.hasNextLine()){
String line = scanner.nextLine();
//System.out.println(line);
lineChar = line.toCharArray();
sortStringBubble (lineChar);
int n = lineChar.length-1;
System.out.print(lineChar[n--]);
for (; n >=0; n-- ) {
if(lineChar[n] != ',') {
System.out.print(",");
System.out.print(lineChar[n]);
}
}
System.out.println();
}//end oof while loop
}
public static void sortStringBubble( char x [ ] )
{
int j;
boolean flag = true; // will determine when the sort is finished
char temp;
while ( flag )
{
flag = false;
for ( j = 0; j < x.length - 1; j++ )
{
if ( Character.toString(x[j]).compareToIgnoreCase( Character.toString(x[j+1]) ) > 0 )
{ // sorting in ascending order
temp = x[j];
x [j] = x [j+1]; // swapping here
x [j+1] = temp;
flag = true;
}
}
}
}
}
我尝试制作测试用例,这里是:
import static org.junit.Assert.*;
import org.junit.Test;
public class MangoDemoTest {
@Test
public void testoutput() {
MangoDemo m = new MangoDemo();
char[] a = {'a','b','c'};
assertEquals("Result: ","c,b,a",m.output());
}
@Test
public void testSortStringBubble() {
fail("Not yet implemented");
}
}
我对此绝对是新手。 我也收到一个错误。 在没有给输出函数提供参数的情况下,没有办法测试输出吗? 有人可以帮忙吗?
谢谢
您的void output()
方法被声明为返回void
。 这意味着它什么也不返回。 但是在下面的代码中,您期望它返回"c,b,a"
。 您必须更改output()
以像String output()
一样返回String
或者检查是否有副作用,即该方法中输出正在执行的任何更改。
assertEquals("Result: ","c,b,a", m.output());
编写可测试的代码也很重要。 阅读此文章编写可测试代码
不,实现output()
方法的方式几乎无法测试其逻辑。 如果您不是将内容打印到System.out
而是将其添加到某个列表并返回该列表,则可以测试该列表的内容以确保它们符合您的期望。
然后,客户端代码(即使用此方法的代码)负责打印到System.out
,而测试使用该代码生成一些数据进行验证。
代替
public static char[] output() {
// get input from somewhere
// print to System.out
}
你可能想做类似的事情
public static void reorder(char[] input) {
char[] output = new char[input.lenght()];
// reorder the input and put it in output
return output;
}
然后,您可以通过进行测试
assertEquals("c,b,a".toCharArray(), m.reorder("a,b,c".toCharArray());
显然,您还必须更改函数的用法,以匹配新签名。
您应该将程序分解为较小的部分。 我认为您真正要测试的是sortStringBubble
。 因此,创建一个测试方法,该方法使用一组特定的字符调用sortStringBubble,然后通过检查结果来检查该方法是否执行了正确的操作。
如果您确实想测试output()
(尽管我不确定是否有很多值),则可以向该方法添加InputStream / OutputStream参数。 然后, output
将从InputStream
读取并写入OutputStream
。 您的测试可以提供一个写入字符串的OutputStream,然后您可以在完成后检查该字符串的内容。
尝试针对更细粒度的测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.