Was macht unit-test-boundary-conditions?
Bietet Muster für Grenzfall-, Randbedingungs- und Limit-Tests in Java-Unit-Tests. Validiert Min-/Max-Werte, Nullfälle, leere Collections, numerischen Über-/Unterlauf, Fließkommagenauigkeit und Off-by-One-Szenarien mit JUnit 5 und AssertJ. Verwenden Sie dies beim Schreiben von .java-Testdateien, um sicherzustellen, dass der Code Grenzen, Randfälle und spezielle Eingaben korrekt verarbeitet.
Verwendung
Verwenden Sie diese Skill, wenn Sie Java-Unit-Tests mit JUnit 5 und AssertJ schreiben, um Grenzfälle und Randbedingungen abzudecken. Die folgenden Muster werden unterstützt:
Grenzfall-Muster
import static org.assertj.core.api.Assertions.assertThat;
@Test
void testBoundaryConditions() {
// Min/Max-Werte
assertThat(Integer.MIN_VALUE).isLessThan(0);
assertThat(Integer.MAX_VALUE).isGreaterThan(0);
// Nullfälle
assertThat((String) null).isNull();
assertThat(Optional.empty()).isEmpty();
// Leere Collections
assertThat(List.of()).isEmpty();
assertThat(Set.of()).isEmpty();
// Numerischer Überlauf/Unterlauf
assertThat(Integer.MAX_VALUE + 1).isEqualTo(Integer.MIN_VALUE); // Überlauf
assertThat(Integer.MIN_VALUE - 1).isEqualTo(Integer.MAX_VALUE); // Unterlauf
// Fließkommagenauigkeit
assertThat(0.1 + 0.2).isCloseTo(0.3, within(1e-10));
// Off-by-One-Fehler
assertThat(new int[10].length).isEqualTo(10);
}
Beispiele für spezifische Tests
Testen von Min/Max-Werten
@Test
void testMinMaxValues() {
int min = -2147483648;
int max = 2147483647;
assertThat(min).isEqualTo(Integer.MIN_VALUE);
assertThat(max).isEqualTo(Integer.MAX_VALUE);
}
Testen von Null- und leeren Collections
@Test
void testNullAndEmpty() {
assertThat((String) null).isNull();
assertThat(List.of()).isEmpty();
assertThat(Optional.empty()).isEmpty();
}
Testen von numerischem Überlauf/Unterlauf
@Test
void testOverflowUnderflow() {
assertThat(Integer.MAX_VALUE + 1).isEqualTo(Integer.MIN_VALUE);
assertThat(Integer.MIN_VALUE - 1).isEqualTo(Integer.MAX_VALUE);
}
Testen von Fließkommagenauigkeit
@Test
void testFloatingPointPrecision() {
assertThat(0.1 + 0.2).isCloseTo(0.3, within(1e-10));
}
Testen von Off-by-One-Fehlern
@Test
void testOffByOne() {
int[] array = new int[10];
assertThat(array.length).isEqualTo(10);
// Index 0 bis 9 gültig
assertThatThrownBy(() -> array[10]).isInstanceOf(ArrayIndexOutOfBoundsException.class);
}