Падает тест. Не могу понять какое еще условие можно подкинуть. Java / jUnit

Пользователь

от rossarko , в категории: Java , 7 дней назад

На хекслете решаю очередную задачу и застрял немного. Сначала упал один тест, потом после рефакторинга упал совершенно другой тест. Уже запутался. По заданию я должен писать методом "черный ящик" , кажется так называется, или же TDD. Тест написал, потом написал класс с инициализацией перегруженных методов. Вроде всё так, но будто что-то упустил т.к все равно не прохожу проверку.

 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
60
61
62
63
64
package io.hexlet;


import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static io.hexlet.implementations.Methods.fill;


import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;


class MethodsTest {
    private List<String> coll = new ArrayList<>();
    private List<String> emptyColl = new ArrayList<>();


    @BeforeEach
    public void beforeEach() {
        coll.addAll(Arrays.asList("a", "b", "c", "d"));
    }
    @Test
    public void testFill() {
        fill(coll, "*", 1, 3);
        assertEquals(Arrays.asList("a", "*", "*", "d"), coll);
    }
    @Test
    public void testFill1() {
        fill(coll, "*");
        assertEquals(Arrays.asList("*", "*", "*", "*"), coll);
    }
    @Test
    public void testFill2() {
        fill(coll, "*", 4, 6);
        assertEquals(Arrays.asList("a", "b", "c", "d"), coll);
    }
    @Test
    public void testFill3() {
        fill(coll, "*", 0, 10);
        assertEquals(Arrays.asList("*", "*", "*", "*"), coll);
    }
    @Test
    public void testFill4() {
        fill(coll, "*", 2);
        assertEquals(Arrays.asList("a", "b", "*", "*"), coll);
    }
    @Test
    public void testFill5() {
        fill(coll, "*", -1, 4);
        assertEquals(Arrays.asList("*", "*", "*", "*"), coll);
    }
    @Test
    public void testFill6() {
        fill(emptyColl, "*");
        assertEquals(Arrays.asList(), emptyColl);
    }
    @Test
    public void testFill7() {
        fill(coll, "*", 5, 6);
        assertEquals(Arrays.asList("a", "b", "c", "d"), coll);
    }
}



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
Failures (1):
  JUnit Jupiter:TestsTest:testRightImplementation()
    MethodSource [className = 'io.hexlet.TestsTest', methodName = 'testRightImplementation', methodParameterTypes = '']
    => org.opentest4j.AssertionFailedError: [The tests should have passed, but they failed] 
Expecting value to be true but was false
       java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
       java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
       io.hexlet.TestsTest.testRightImplementation(TestsTest.java:44)
       java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
       java.base/java.lang.reflect.Method.invoke(Method.java:580)
       org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:727)
       org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
       org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
       org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
       org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
       [...]
Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от jaren , 5 дней назад

@rossarko  Проблема скорее всего в реализации метода fill, который Вы пытаетесь тестировать. Попробуйте реализовать метод fill так, чтобы он обрабатывал все пограничные случаи:

 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
package io.hexlet.implementations;

import java.util.List;

public class Methods {
    public static void fill(List<String> list, String value) {
        for (int i = 0; i < list.size(); i++) {
            list.set(i, value);
        }
    }

    public static void fill(List<String> list, String value, int start, int end) {
        // Проверка на валидность списка
        if (list == null || list.isEmpty()) {
            return;
        }

        // Корректировка диапазона
        int validStart = Math.max(0, start); // Не меньше 0
        int validEnd = Math.min(list.size(), end); // Не больше размера списка

        // Если диапазон некорректный, ничего не делать
        if (validStart >= validEnd) {
            return;
        }

        // Заполнение списка в заданном диапазоне
        for (int i = validStart; i < validEnd; i++) {
            list.set(i, value);
        }
    }

    public static void fill(List<String> list, String value, int start) {
        fill(list, value, start, list.size());
    }
}