Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
17 / 2 / 1
Регистрация: 09.05.2013
Сообщений: 171

Исключения и тесты

06.05.2019, 00:39. Показов 3084. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Есть класс, выполняющий несложные действия. Есть тесты, два последних из них, проверяющие вызов исключения, проваливаются с сообщением

Bash
1
org.opentest4j.AssertionFailedError: Expected Wind8.PointException to be thrown, but nothing was thrown.
При этом исключение всё таки генерируется и ожидаемое сообщение выдаёт. Помогите, пожалуйста, разобраться, что я делаю не так.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class Wind8 {
 
    private String nameW;
    private int degreeW;
 
    public static int Point=45;
    public static Wind8 N = new Wind8("North",0);
    public static Wind8 E = new Wind8("East",90);
    public static Wind8 S = new Wind8("South",180);
    public static Wind8 W = new Wind8("West",270);
 
    public Wind8(String nameW, int degreeW) {
        this.nameW=nameW;
        this.degreeW=degreeW;
    }
 
    public static int degrees(Wind8... args)
    {
        int summ=0;
 
        try {
            if (args.length == 2) {
                if (args[0].nameW.equals(args[1].nameW))
                    throw new PointException(args[0].nameW, args[1].nameW);
                if (args[0].nameW.equals("North") && !args[1].nameW.equals("East") && !args[1].nameW.equals("West"))
                    throw new PointException(args[0].nameW, args[1].nameW);
                if (args[0].nameW.equals("South") && !args[1].nameW.equals("East") && !args[1].nameW.equals("West"))
                    throw new PointException(args[0].nameW, args[1].nameW);
                if (args[0].nameW.equals("North") && args[1].nameW.equals("West")) summ += 360;
            }
            for (int i = 0; i < args.length; i++) {
                summ += args[i].degreeW;
            }
 
       } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return summ/args.length;
    }
 
    public String toString(){
        return nameW;
    }
 
    static class PointException extends Exception  {
 
        private static String s1, s2;
 
        public PointException(String s1, String s2)
        {
            this.s1=s1;
            this.s2=s2;
        }
 
        public String getMessage(){
            return String.format("%s-%s",s1,s2);
        }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import org.junit.jupiter.api.Test;
 
import static org.junit.jupiter.api.Assertions.*;
 
class Wind8Test {
 
    private void assertException(Wind8 a, Wind8 b, String message) {
        Wind8.PointException exception = assertThrows(
                Wind8.PointException.class, () -> Wind8.degrees(a, b));
        assertEquals(message, exception.getMessage());
    }
 
    @Test
    public void cardinal() { // Основные направления.
        assertEquals(0, Wind8.degrees(Wind8.N));
        assertEquals(Wind8.Point * 2, Wind8.degrees(Wind8.E));
        assertEquals(Wind8.Point * 4, Wind8.degrees(Wind8.S));
        assertEquals(Wind8.Point * 6, Wind8.degrees(Wind8.W));
    }
 
    @Test
    public void intercardinal() { // Промежуточные направления.
        assertEquals(Wind8.Point, Wind8.degrees(Wind8.N, Wind8.E));
        assertEquals(Wind8.Point * 3, Wind8.degrees(Wind8.S, Wind8.E));
        assertEquals(Wind8.Point * 5, Wind8.degrees(Wind8.S, Wind8.W));
        assertEquals(Wind8.Point * 7, Wind8.degrees(Wind8.N, Wind8.W));
    }
 
    @Test
    public void stringRepresentation() { // Полные названия.
        assertEquals("North", Wind8.N.toString());
        assertEquals("East", Wind8.E.toString());
        assertEquals("South", Wind8.S.toString());
        assertEquals("West", Wind8.W.toString());
    }
 
    @Test
    public void wrongCardinal() { // Повторы.
        assertException(Wind8.N, Wind8.N, "North-North");
        assertException(Wind8.E, Wind8.E, "East-East");
        assertException(Wind8.S, Wind8.S, "South-South");
        assertException(Wind8.W, Wind8.W, "West-West");
    }
    @Test
    public void incorrectIntercardinalOrder() { // Неправильный порядок.
        assertException(Wind8.E, Wind8.N, "East-North");
        assertException(Wind8.E, Wind8.S, "East-South");
        assertException(Wind8.W, Wind8.N, "West-North");
        assertException(Wind8.W, Wind8.S, "West-South");
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.05.2019, 00:39
Ответы с готовыми решениями:

тесты(систем продуктов программ.)тесты?!?!
тесты,плиз кто умеет?!?! токо овтет кратко,например 2-а,и т.д. заранее благодарю и спс......

Организация собственного исключения и передача в него исходного исключения
Для обработки исключений при работе с БД я создал собственное исключение: public class SQLEntityException : ApplicationException ...

тесты...
люди помогите прошу вас решите сколько сможите (((((((

4
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
06.05.2019, 06:54
Цитата Сообщение от AleksandraM Посмотреть сообщение
При этом исключение всё таки генерируется и ожидаемое сообщение выдаёт.
да, вот только ты его прямо в методе перехватываешь и никуда не кидаешь снова, для теста это означает, что ничего и не было! Решение - наследуем наше исключение от непроверяемых, например IllegalArgementException и в методе degrees убираем try-catch

тест incorrectIntercardinalOrder() вообще не верен, для него нет условий в методе дигриз

на правах того, кто скачал архив и потратил время дам пару советов :
1) не используй статики, если прямо не прижало совсем
2) не используй вложенные и статик классы если вот прям точно без этого никак
3) один ассерт на тест, не надо 4 проверки в 1 тест пихать: первый падает и дальше мы не в курсе, что там - может остальные то пашут
4) ставь скобки после выражения вот так if (condition) { а не так
Java
1
2
if (condition)
{
5) когда кажется, что все написала, нажми в Идее комбинашку Контрл-Альт-L она все отформатирует
1
17 / 2 / 1
Регистрация: 09.05.2013
Сообщений: 171
06.05.2019, 21:02  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
Решение - наследуем наше исключение от непроверяемых, например IllegalArgementException
Большое спасибо за ответ! Можно поподробнее, как это сделать?

Только начала изучать java. Тесты писали не я, они были даны, моя задача написать класс, который их пройдёт.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
06.05.2019, 21:56
Лучший ответ Сообщение было отмечено AleksandraM как решение

Решение

зачем тебе дают задания, которые ты не можешь решить?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public enum Wind8 {
    N("North", 0),
    E("East", 2),
    S("South", 4),
    W("West", 6);
 
    private String name;
    private int direction;
 
    Wind8(final String name, final int direction) {
        this.name = name;
        this.direction = direction;
    }
 
    @Override
    public String toString() {
        return name;
    }
 
    public static int Point = 1;
 
    public static int degrees(Wind8 wind8) {
        return wind8.direction * Point;
    }
 
    public static int degrees(Wind8 start, Wind8 end) {
        if (start == end) {
            throw new PointException(getInterval(start, end));
        } else if (start == E || start == W) {
            throw new PointException(getInterval(start, end));
        }
        
        int begin = start.direction;
        if (start == N && end == W) {
            begin = 8;
        }
 
        return (begin + end.direction) / 2;
    }
 
    private static String getInterval(final Wind8 start, final Wind8 end) {
        return String.join("-", start.toString(), end.toString());
    }
 
    public static class PointException extends RuntimeException {
        public PointException(final String message) {
            super(message);
        }
    }
}
В общем то если подумать, можно сделать лучше, но мне, как водится, лень
0
17 / 2 / 1
Регистрация: 09.05.2013
Сообщений: 171
06.05.2019, 22:08  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
зачем тебе дают задания, которые ты не можешь решить?
Не знаю, наверное, чтобы моя жизнь не была слишком лёгкой

Огромнейшее спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.05.2019, 22:08
Помогаю со студенческими работами здесь

Тесты
Люди,надо составить на Delphi 3-и теста по 10 вопросов в каждом на тему ,,Комбинаторные алгоритмы (алгоритмы подмножества всех множеств,...

Тесты
Как создать тест к программе? Т.е. он бы проверял правильно ли программа сделана... например как жюри используют на олимпиадах тесты для...

Тесты и бд
Здравствуйте. Помогите советом пожалуйста, я тестирую DAO слой(Hibernate + Spring). Я создал аналогичную тестовую бд. Вот код теста: ...

Тесты
Всем привет. Помогите немного доработать программу: нужно написать тесты для методов класса BankAccount. Что есть: class...

Тесты по go
Начал изучение go, хотел бы какие-то тесты или задачи, на подобие Quizful, но там нет раздела под go, может кто подскажет что похожее?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru