Есть код, который по алгоритму Эвклида находит наибольший общий делитель.
import java.util.Scanner;
/**
* Created by user on 24.11.2015.
* По данным двум числам 1 public static int Euclid(int a, int b) { //конструктор
if (a == 0 || b == 0) { //Рассматривается случай, когда одно из
if (a == 0) { //делимых равно нулю
return b;
}
else {
return a;
}
} else {
if (a > 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 мне показывает ошибку компиляции.
Когда я переписал класс, заменив конструктор методом с другим названием всё прошло как по маслу. Связи с этим вопросы:
Можно ли покрыть конструктор тестами так, чтобы не вызвать ошибку компиляции?
Как это сделать?
Ответ
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);
}
}
Комментариев нет:
Отправить комментарий