Страницы

Поиск по вопросам

воскресенье, 12 мая 2019 г.

Как покрыть тестами конструктор класса в java?

Есть код, который по алгоритму Эвклида находит наибольший общий делитель.
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); } }

Комментариев нет:

Отправить комментарий