Страницы

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

понедельник, 24 февраля 2020 г.

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

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

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

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