Как создать Maven test для массива?

Помогите пожалуйста в решении задачи : Сделайте класс ArrayUtils В классе реализуйте методы: double average(int[] array) - возвращает среднее арифметическое всех элементов массива (предусмотрите варианты для округления до двух знаков после запятой и прием пустого/нуллового массива)

boolean isSquareMatrix(int[][] array) - возвращает true если матрица квадратния (предусмотрите логику если переданный массив null ) Создайте тесты на проверку каждого метода из класса ArrayUtils Должны быть проверены все возможные варианты логики.

вот мои методы :

public double average (int[]array){
int sum = 0;
double averageNumber;
int i = 0;
    for (; i < array.length ; i++) {
        array[i] = 1 + i;
        if (array[i] == 0){
            System.out.println("Empty array");
        }
    }
    sum = sum + array[i];
    averageNumber =(double) sum/array.length;
    String formattedDouble = new DecimalFormat("#0.00").format(averageNumber);
    return averageNumber;
}
    public boolean isSquareMatrix(int[][] array){
        for (int i = 0;  i < array.length; i++ ) {
            for (int j = 0; j < array.length; j++) {
                array[i] = new int [array.length];
                if (i == j) {
                    array[i][j] = i* array.length + j;
                } else if (i == 0) {
                    System.out.println("Empty array");
                }else {
                    return false;
                }
            }
        }
        return true;
    }
}

Начал писать тесты и не пойму что с чем сравнивать :

import junit.framework.TestCase;
import org.junit.Assert;
import org.junit.Test;

public class ArrayUtilsTestTest extends TestCase {
    private final ArrayUtils arrayUtils = new ArrayUtils();

@Test
    public void average(){
double result = arrayUtils.average(new int[] {5,3,4,6,9});
 Assert.assertEquals();
    }
}

Ответы (1 шт):

Автор решения: Дмитрий

У вас логика написана сложно и неправильно. к примеру, где в методе поиска среднего арифметического проверка исходного массива на null?

import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.Optional;

public class ArrayUtils  {
    
    private final static DecimalFormat FORMATTER = new DecimalFormat("#0.00");

    public double average(int[] array) {
        return Optional.ofNullable(array).map(arr -> Arrays.stream(arr).average().orElse(0d)).orElse(0d);
    }
    
    public String format(double number) {
        return FORMATTER.format(number);
    }

    public boolean isSquareMatrix(int[][] array) {
        if (array == null ) return false;
        for (int arr[] : array) {
            if (array.length != arr.length) return false;
        }
        return true;
    }

}

Для юнит тестов есть позитивный и негативные сценарии, можете почитать про это. Для начала они будут примерно такие:

import org.junit.Test;
import static org.junit.Assert.*;

public class ArrayUtilsTest {
    
    private ArrayUtils instance = new ArrayUtils();

    @Test
    public void testAverage() {
        int[] array = {1,2,3,4,5,6};
        assertEquals(3.5, instance.average(array), 0.00001);
    }
    
    @Test
    public void testAverageNullArray() {
        int[] array = null;
        assertEquals(0.0, instance.average(array), 0.00001);
    }

    @Test
    public void testFormat() {
        double number = 1.23456789;
        assertEquals("1,23", instance.format(number));
    }

    @Test
    public void testIsSquareMatrix() {
        int[][] array = {
            {1,2,3},
            {4,5,6},
            {7,8,9}
        };        
        assertTrue(instance.isSquareMatrix(array));
    }
    
    @Test
    public void testIsNotSquareMatrix() {
        int[][] array = {
            {1,2,3},
            {4,5,6},
            {7,8}
        };
        assertFalse(instance.isSquareMatrix(array));
    }
    
    @Test
    public void testIsNotSquareNullArray() {
        int[][] array = null;
        assertFalse(instance.isSquareMatrix(array));
    }
    
}
→ Ссылка