#java #junit4
#java #junit4
Вопрос:
Я пытаюсь написать тест для следующего метода:
public class Sort {
...
...
...
public static String[][] findRanks(String[][] array, int indexOfPoints, int indexOfRank) {
for (int i = 0; i < array.length - 1; i ) {
int compare = 1;
if (i < array.length - 2)
compare = Double.valueOf(array[i][indexOfPoints]).compareTo(Double.valueOf(array[i 1][indexOfPoints]));
if (i == array.length - 1 || compare != 0) {
array[i][indexOfRank] = Integer.toString(i 1);
}
else {
array[i][indexOfRank] = Integer.toString(i 1) " - " Integer.toString(i 2);
array[i 1][indexOfRank] = Integer.toString(i 1) " - " Integer.toString(i 2);
i ;
}
}
return array;
}
}
Я попробовал следующий тест:
import static org.junit.Assert.*;
import junit.framework.TestCase;
import org.junit.Test;
public class SortTest extends TestCase {
@Test
public void testFindRanks() {
String[][] array = { {"Siim Susi","12.61","5.00","9.22","1.50","60.39","16.43","21.60","2.60","35.81","5.25.72","6253.0","1"},
{"Beata Kana","13.04","4.53","7.79","1.55","64.72","18.74","24.20","2.40","28.20","6.50.76","5290.0","2"}};
Sort test1 = new Sort(array, 11, 12); //This is where the problem is
String[][] expected = { {"Siim Susi","12.61","5.00","9.22","1.50","60.39","16.43","21.60","2.60","35.81","5.25.72","6253.0","1"},
{"Beata Kana","13.04","4.53","7.79","1.55","64.72","18.74","24.20","2.40","28.20","6.50.76","5290.0","2"}};
assertTrue(expected.equals(test1));
fail("Not yet implemented");
}
}
Но тест продолжает сообщать мне «конструктор сортировки (строка[][], 11, 12);» не определено.
Почему он думает, что это должен быть конструктор и как мне это исправить?
Спасибо.
Ответ №1:
Вы должны написать
String[][] results = Sort.findRanks(array, 11, 12);
и чтобы сделать ваши модульные тесты более чистыми, более идиоматичными и простыми в обслуживании, вы также могли бы немного реорганизовать их:
public class SortTest extends TestCase {
@Test
public void testFindRanks() {
String[][] array = {...};
String[][] expected = {...};
String[][] result = Sort.findRanks(array, 11, 12);
assertArrayEquals(expected, result);
}
}
То есть разделите тестовую настройку, вызов тестируемого метода и код проверки. Также удалите fail
вызов с конца, поскольку это приведет к тому, что ваш тест всегда завершится неудачей 🙂
Комментарии:
1. @Sean, @nicholas, упс, исправлено 🙂
Ответ №2:
Похоже, вам нужно сделать
String[][] actual = Sort.findRanks(array, 11, 12);
и затем
assertArrayEquals(expected, actual);
Комментарии:
1. findRanks(…) является статическим, и хотя это будет работать, это не является предпочтительным синтаксисом.
2. @nicholas Я заметил это после того, как ответил, и я пересмотрел свой ответ. Спасибо.
Ответ №3:
Это вызов конструктора:
new Sort(array, 11, 12)
И компилятор жалуется, если такой конструктор недоступен
Прочитайте о конструкторах в руководстве по Java
Ответ №4:
Сообщение абсолютно правильное: ваш Sort
класс не определяет конструктор, который принимает String[][], int, int
в качестве параметров, который вы вызываете в строке, в которой возникла проблема.
Вам нужно:
String[][] actual = Sort.findRanks(array, 11, 12);
Ответ №5:
Ну, не похоже, что у вас есть Sort
определенный конструктор (по крайней мере, в коде, который вы опубликовали). И компилятор / IDE сообщает вам, что у вас не определен Sort
конструктор.
Вы, вероятно, имеете в виду вызов этой строки:
String[][] value = Sort.findRanks(array, 11, 12);
//Sort test1 = new Sort(array, 11, 12); <-- dont call this...call the above...