TriangleTest с использованием Junit: тип void не допускается - PullRequest
0 голосов
/ 23 марта 2020

У меня есть этот код, и я попытался создать модульные тесты, используя Junit. Когда я пытаюсь проверить ГЛАВНУ следующим образом;

@Test
public void testMain(){
    assertEquals(determineType(0,1,1),"ABCDEF");
}

Мне постоянно говорят, что тип void здесь запрещен. Что мне делать?


package triangle;

public class Triangle {


    public static void determineType(int a, int b, int c) {
        if (a >= (b + c) || c >= (b + a) || b >= (a + c)) {
            System.out.println("Not a Triangle");
        } else if (a == b && b == c) {
            System.out.println("Equilateral Triangle");
        } else if (((a * a) + (b * b)) == (c * c) || ((a * a) + (c * c)) == (b * b) || ((c * c) + (b * b)) == (a * a)) {
            System.out.println("Right Triangle");
        } else if (a != b && b != c && c != a) {
            System.out.println("Scalene Triangle");
        } else if ((a == b && b != c) || (a != b && c == a) || (c == b && c != a)) {
            System.out.println("Isosceles Triangle");
        }
    }

    public static void main(String[] args) {
        determineType(1, 1, 9);
    }
}

Ответы [ 3 ]

0 голосов
/ 23 марта 2020

На вашем месте я бы немного изменил метод, и вместо распечатки я бы возвратил перечисление, обозначающее тип треугольника. Будет гораздо проще протестировать и использовать этот метод в других местах.

public class Triangle {

    public static TriangleType determineType(int a, int b, int c) {
        if (a >= (b + c) || c >= (b + a) || b >= (a + c)) {
            return TriangleType.NONE;
        } else if (a == b && b == c) {
            return TriangleType.EQUILATERAL;
        } else if (((a * a) + (b * b)) == (c * c) || ((a * a) + (c * c)) == (b * b) || ((c * c) + (b * b)) == (a * a)) {
            return TriangleType.RIGHT;
        } else if (a != b && b != c && c != a) {
            return TriangleType.SCALENE;
        } else if ((a == b && b != c) || (a != b && c == a) || (c == b && c != a)) {
            return TriangleType.ISOSCELES;
        }
        return TriangleType.NONE;
    }

    public static void main(String[] args) {
        final TriangleType type = determineType(1, 1, 9);
        System.out.println(type);
    }

    enum TriangleType {
        EQUILATERAL, RIGHT, SCALENE, ISOSCELES, NONE
    }
}

И тест будет следующим:

@Test
public void determineType() {
    Assertions.assertAll(
            () -> assertEquals("Should be isosceles", Triangle.TriangleType.ISOSCELES, Triangle.determineType(2, 2, 3)),
            () -> assertEquals("Should be equilateral", Triangle.TriangleType.EQUILATERAL, Triangle.determineType(2, 2, 2)),
            () -> assertEquals("Should be right", Triangle.TriangleType.RIGHT, Triangle.determineType(4, 3, 5))
    );
}
0 голосов
/ 23 марта 2020

Попробуйте этот код, я исправил ошибки

TestCode

    @Test
    public void testMain(){
        assertEquals(determineType(0,1,1),"Not a Triangle");
    }

SourceCode

package triangle;

public class Triangle {


    public static String determineType(int a, int b, int c) {

        if (a >= (b + c) || c >= (b + a) || b >= (a + c)) {
            return "Not a Triangle";
        } else if (a == b && b == c) {
            return "Equilateral Triangle";
        } else if (((a * a) + (b * b)) == (c * c) || ((a * a) + (c * c)) == (b * b) || ((c * c) + (b * b)) == (a * a)) {
            return "Right Triangle";
        } else if (a != b && b != c && c != a) {
            return "Scalene Triangle";
        } else if ((a == b && b != c) || (a != b && c == a) || (c == b && c != a)) {
            return "Isosceles Triangle";
        }
        // other case
        return null;
    }

    public static void main(String[] args) {
        System.out.println(determineType(1, 1, 9));
    }
}
0 голосов
/ 23 марта 2020

Можно протестировать методы, которые ничего не возвращают (void), но вы должны проверить побочные эффекты этого метода, но здесь, в вашем случае determineType метод, не показывающий никаких побочных эффектов, это больше похоже на проверку метод и ничего не возвращать, т.е. void, и так как он ничего не возвращает, поэтому вы не можете использовать assertEquals(expected,actual), потому что assertEquals - это всегда сравнение между чем-то фактическим результатом вашей операции и ожидаемым результатом .

Поэтому, чтобы протестировать этот метод, вы можете изменить тип возврата метода determineType с void на String (то есть удалить sysouts и просто return результат каждого из них. условие сравнения r \ например, "Не треугольник" и т. д. c.).

Затем 5 различные тестовые случаи для проверки каждого условия, указанного в вашем методе determineType, и сравнения возвращенного значения String с ваш ожидаемый результат.

Что-то вроде,

    @Test
    public void testNotATriangle(){
        assertEquals(determineType(0,1,1), "Not a Triangle");
    }

    @Test
    public void testEquilateralTriangle(){
        assertEquals(determineType(1,1,1), "Equilateral Triangle");
    }

    // other test case here, for each condition

   public static String determineType(int a, int b, int c) {

        if(a >= (b+c) || c >= (b+a) || b >= (a+c) ) {
            return "Not a Triangle";
        } else if(a==b && b==c) {
            return "Equilateral Triangle";
        } else if (((a * a) + (b * b)) == (c * c) || ((a * a) + (c * c)) == (b * b)|| ((c * c)      + (b * b)) == (a * a)) {
            return "Right Triangle";
        } else if(a!=b && b!=c && c!=a) {
            return "Scalene Triangle";
        } else if ((a==b && b!=c ) || (a!=b && c==a) || (c==b && c!=a)) {
            return "Isosceles Triangle";
        }
        return null;
    }

    public static void main(String [] args) {
        determineType(1,1,9);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...