Почему jUnit 5 не видит мой тест исключения? - PullRequest
1 голос
/ 21 июня 2020

Я написал 48 методов тестирования, чтобы проверить свое задание по курсу. Ни один из них не является исключительным тестом, но они работают правильно.

Наконец, я попытался проверить свои собственные исключения, JUnit 5 не видит этого. Вот несколько примеров моего дизайна кода и теста исключений.

import static org.junit.jupiter.api.Assertions.*;
import org.junit.Test;
import junit.framework.TestCase;

public class Final_Tests extends TestCase {
    
    @Test
    public static void testD4_setChair() {
    Department testD = new Department("CSE 101","CSE 101!");
    Teacher testT = new Teacher("Ali","Veli.com",testD,"CV");
    testD.setChair(testT);
    assertEquals(testT,testD.getChair());
}

Нет проблем с тестированием неисключительных методов.

Проблема здесь:

@Test 
public static void DepartmentMismatchException_Test() {
Department testD = new Department("CSE 101","CSE 101!");
Teacher testT = new Teacher("Mehmet", "mehmet.com", testD, "CV Mehmet");
Course testC1 = new Course(testD,101,"Test Course 1","Test Course 1 Desc.",testT,6);
String expMsg = "DepartmentMismatchException: Teacher in " + testT.getDepartment().getCode()+ ", Course in " +testC1.getDepartment().getCode();
    
DepartmentMismatchException dme =  new DepartmentMismatchException(testT.getDepartment(), testC1.getDepartment());
    assertEquals(expMsg, dme.toString());
}

Есть ли проблема с дизайном кода, например с использованием областей действия, stati c или других модификаторов, или с моими тестовыми кодами исключений?

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Взято из JUnit5 @Test javado c:

@ Методы тестирования не должны быть закрытыми или статическими c и не должны возвращать значение.

Таким образом, вы должны удалить из них ключевое слово static, и тест должен работать правильно.

Обычно исключения проверяют throw каким-то образом исключения и проверяют, правильно ли оно было thrown. Я вижу, вы создаете его экземпляр и проверяете, соответствует ли сообщение ожидаемому, но лучший подход будет примерно таким:

@Test
public void DepartmentMismatchException_Test() {
    Department testD = new Department("CSE 101","CSE 101!");
    Teacher testT = new Teacher("Mehmet", "mehmet.com", testD, "CV Mehmet");
    Course testC1 = new Course(testD,101,"Test Course 1","Test Course 1 Desc.",testT,6);
    String expMsg = "DepartmentMismatchException: Teacher in " + testT.getDepartment().getCode()+ ", Course in " +testC1.getDepartment().getCode();

    Exception thrownException = Assertions.assertThrows(DepartmentMismatchException.class, () -> /* Some code that throws your exception */);
    assertEquals(expMsg, thrownException.toString() /* or maybe thrownException.getMessage() */);
}

Вы можете проверить руководство и другие примеры здесь .

0 голосов
/ 21 июня 2020

Я предполагаю, что testT.getDepartment () выдаст DME, если да, попробуйте использовать org.junit.Rule

@Rule
    public ExpectedException myExpectedException = ExpectedException.none();

    @Test 
    public void DepartmentMismatchException_Test() {
        Department testD = new Department("CSE 101","CSE 101!");
        Teacher testT = new Teacher("Mehmet", "mehmet.com", testD, "CV Mehmet");
        Course testC1 = new Course(testD,101,"Test Course 1","Test Course 1 
        Desc.",testT,6);
        String expMsg = "DepartmentMismatchException: Teacher in " + 
        testT.getDepartment().getCode()+ ", Course in " 
        +testC1.getDepartment().getCode();
    
        testT.getDepartment(); // or any other st. which you expect it to throw DME
        myExpectedException.expect(DepartmentMismatchException .class);
        myExpectedException.expectMessage(expMsg);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...