#java #intellij_idea #юнит_тесты #test_driven_development
Есть код, который по алгоритму Эвклида находит наибольший общий делитель. import java.util.Scanner; /** * Created by user on 24.11.2015. * По данным двум числам 1 b) { return Euclid(a % b, b); //рекурсивно вызовется } // алгоритм, если будет остаток от деления большего if (b > a) { // числа на меньшее и наоборот return Euclid(a, b % a); } else return Euclid(a % b, b); } } public static void main(String[] args) { Scanner sc1 = new Scanner(System.in); //ввод с клавиатуры Scanner sc2 = new Scanner(System.in); int a = sc1.nextInt(); int b = sc2.nextInt(); System.out.println(Euclid(a,b)); } } Несмотря на то, что программа работает, я решил по практиковаться на ней в разработке через тестирование. Пишу тест: import org.junit.Test; import static org.junit.Assert.*; public class EuclidTest { @Test public void testEuclid() throws Exception { int result = new Euclid(234, 45); //в этой строке ошибка компиляции assertEquals(9, result, 1e-9); } } В строке, где я объявляю result мне показывает ошибку компиляции. Когда я переписал класс, заменив конструктор методом с другим названием всё прошло как по маслу. Связи с этим вопросы: Можно ли покрыть конструктор тестами так, чтобы не вызвать ошибку компиляции? Как это сделать?
Ответы
Ответ 1
public static int Euclid(int a, int b) { //конструктор Дело в том, что это у вас не конструктор, а статический метод, возвращающий int. Конструктор был бы такой (он возвращает объект класса Euclid): public Euclid(int a, int b) { //конструктор Вообще, конструктор здесь не нужен никоим образом. Вам не нужно хранить какое-то состояние, так что и объекты создавать незачем. Переименуйте ваш метод euclid с маленькой буквы, как положено по стандарту именования и пишите вот такой тест: import org.junit.Test; import static org.junit.Assert.*; public class EuclidTest { @Test public void testEuclid() throws Exception { assertEquals(9, euclid(234, 45), 1e-9); } }
Комментариев нет:
Отправить комментарий