Как создать 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));
}
}