Тестовый набор Java Junit для класса - PullRequest
0 голосов
/ 25 января 2012

Моя программа выглядит следующим образом:

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

}

Я абсолютный новичок в этом. Я тоже получаю ошибку. Разве я не могу проверить вывод без указания параметра для функции вывода? Может кто-нибудь помочь, пожалуйста?

спасибо

Ответы [ 3 ]

3 голосов
/ 25 января 2012

Ваш void output() метод объявлен как возвращающий void.Это значит, что ничего не возвращается.Но в приведенном ниже коде вы ожидаете, что он вернет "c,b,a".Либо вам нужно изменить output(), чтобы он возвращал String, как String output(), либо проверить наличие побочных эффектов, т. Е. Любых изменений, которые выводит метод.

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

Написание тестируемого кода такжеважный.Прочитайте эту статью Написание тестируемого кода

0 голосов
/ 25 января 2012

Вы должны разбить вашу программу на более мелкие части. Я думаю, что вы действительно пытаетесь проверить это sortStringBubble. Поэтому создайте тестовый метод, который вызывает sortStringBubble с определенным набором символов, а затем проверяет, что метод сделал правильную вещь, проверяя результат.

Если вы действительно хотите протестировать output() (хотя я не уверен, что это имеет большое значение), вы можете добавить в метод параметры InputStream / OutputStream. output будет читать из InputStream и писать в OutputStream. Ваш тест может предоставить OutputStream, который записывает в строку, а затем вы можете проверить содержимое этой строки, когда это будет сделано.

Попробуйте стремиться к тестам на более детальном уровне.

0 голосов
/ 25 января 2012

Нет, так как вы реализовали метод 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());

Очевидно, вам также придется изменить использование вашей функции, чтобы соответствовать новой сигнатуре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...