繁体   English   中英

该类的Java junit测试用例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM