0

我的程序如下:

   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");
    }

}

我对此绝对是新手。我也收到错误消息。有没有办法在不给输出函数提供参数的情况下测试输出?有人可以帮忙吗?

谢谢

4

3 回答 3

3

您的void output()方法被声明为 return void。这意味着它什么也不返回。但在下面的代码中,您期望它返回"c,b,a"。要么您必须更改output()返回StringString output()要么检查副作用,即输出在方法中执行的任何更改。

assertEquals("Result: ","c,b,a", m.output());

编写可测试的代码也很重要。阅读这篇文章编写可测试的代码

于 2012-01-25T01:31:26.310 回答
0

不,您实现该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());

显然,您也必须更改函数的用法,以匹配新签名。

于 2012-01-25T01:34:34.847 回答
0

你应该把你的程序分解成更小的部分。我认为你真正想要测试的是sortStringBubble. 因此,创建一个测试方法,使用特定的字符集调用 sortStringBubble,然后通过检查结果来检查该方法是否正确。

如果您真的想测试output()(尽管我不确定是否有很多价值),您可以将 InputStream/OutputStream 参数添加到方法中。output然后将读取InputStream和写入OutputStream. 您的测试可以提供一个写入字符串的 OutputStream,然后您可以在完成后检查该字符串的内容。

尝试针对更细粒度的测试。

于 2012-01-25T01:37:21.177 回答