Модульное тестирование действительно легко и лучше всего объяснить на простом примере.
У нас будет следующий класс, вычисляющий среднее значение массива:
package com.stackoverflow.junit;
public class Average {
public static double avg(double[] avg) {
double sum = 0;
// sum all values
for(double num : avg) {
sum += num;
}
return sum / avg.length;
}
}
Наш тест JUnit теперь будет проверять некоторые основные операции этого метода:
package com.stackoverflow.junit;
import junit.framework.TestCase;
public class AverageTest extends TestCase {
public void testOneValueAverage() {
// we expect the average of one element (with value 5) to be 5, the 0.01 is a delta because of imprecise floating-point operations
double avg1 = Average.avg(new double[]{5});
assertEquals(5, avg1, 0.01);
double avg2 = Average.avg(new double[]{3});
assertEquals(3, avg2, 0.01);
}
public void testTwoValueAverage() {
double avg1 = Average.avg(new double[]{5, 3});
assertEquals(4, avg1, 0.01);
double avg2 = Average.avg(new double[]{7, 2});
assertEquals(4.5, avg2, 0.01);
}
public void testZeroValueAverage() {
double avg = Average.avg(new double[]{});
assertEquals(0, avg, 0.01);
}
}
Первые два тестовых примера покажут, что мы реализовали метод правильно, но последний тестовый случай потерпит неудачу.
Но почему?
Длина массива равна нулю, и мы ныряем на ноль. Число с плавающей запятой, деленное на ноль, не является числом (NaN), не равно нулю.