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()はを返すように宣言されてvoidいます。つまり、何も返されません。しかし、以下のコードでは、が返されることを期待しています"c,b,a"output()likeを返すStringように変更するかString 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 に答える