diff --git a/Java/pom.xml b/Java/pom.xml
index 6bad6bf2..98789eb5 100644
--- a/Java/pom.xml
+++ b/Java/pom.xml
@@ -28,6 +28,12 @@
${junit.jupiter.version}
test
+
+ org.junit.jupiter
+ junit-jupiter-params
+ ${junit.jupiter.version}
+ test
+
diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java
index 76406af9..b62f5876 100644
--- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java
+++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java
@@ -1,6 +1,8 @@
package com.gildedrose;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
@@ -10,17 +12,40 @@ class GildedRoseTest {
@Test
void shouldProcessFooItem() {
// given
- final Item[] items = new Item[]{new Item("foo", 0, 0)};
- GildedRose app = new GildedRose(items);
+ GildedRose app = prepareApp(new Item("foo", 0, 0));
// when
app.updateQuality();
// then
final Item item = app.items[0];
- assertThat(item.name).isEqualTo("foo");
- assertThat(item.quality).isEqualTo(0);
- assertThat(item.sellIn).isEqualTo(-1);
+ assertItem(item, "foo", 0, -1);
}
+ @ParameterizedTest(name="Initial quality: {arguments}")
+ @ValueSource(ints={0,1})
+ void shouldTheQualityNeverBeNegative(int initialQuality) {
+ // given
+ GildedRose app = prepareApp(new Item("foo", 0, initialQuality));
+
+ // when
+ app.updateQuality();
+
+ // then
+ final Item item = app.items[0];
+ assertItem(item, "foo", 0, -1);
+ }
+
+ private void assertItem(Item item, String expectedName, int expectedQuality, int expectedSellIn) {
+ assertThat(item).as("item").isNotNull();
+ assertThat(item.name).as("name").isEqualTo(expectedName);
+ assertThat(item.quality).as("quality").isEqualTo(expectedQuality);
+ assertThat(item.sellIn).as("sellIn").isEqualTo(expectedSellIn);
+ }
+
+ private static GildedRose prepareApp(Item... items) {
+ return new GildedRose(items);
+ }
+
+
}