JUnit5์ผ๋ก ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ assertion์ ์ฃผ๋ ๋๊ตฌ๋ก assertJ๋ฅผ ๋ฐฐ์ ๋ค.
์๋ก ๊นจ๋ซ๊ฒ ๋ ๊ฒ์ ์ ๋ฆฌํ๋ฉฐ ์ตํ์.
assertJ?
Java ํ ์คํธ์์ ์ ์ฐฝํ๊ณ ํ๋ถํ assertions๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์คํ ์์ค ์ปค๋ฎค๋ํฐ ๊ธฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ง์
- Standard Java
- Java 8
- Guava
- Joda Time
- Neo4J and
- Swing components
Assertions ์์ฑ
Assertions.assertThat()์ object๋ฅผ ์ ๋ฌํ๋ฉด assertion์ ๋ฐ์ ์ ์๋ค.
Obejct Assertions
Obejct๋ ๋ ๊ฐ์ฒด์ ๋์ผ์ฑ์ด๋ ๊ฐ์ฒด์ ํ๋๋ฅผ ์กฐ์ฌํ๊ธฐ ์ํด ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋น๊ตํ ์ ์๋ค.
Example
๋ Dog์ ๊ฐ์ฒด์ธ fido์ fidoClone์ด ์ฃผ์ด์ง ๋
public class Dog {
private String name;
private Float weight;
// standard getters and setters
}
Dog fido = new Dog("Fido", 5.25);
Dog fidosClone = new Dog("Fido", 5.25);
assertThat
์ ์ด์ฉํด ๋น๊ตํ๋ค.
assertThat(fido).isEqualTo(fidosClone);
ํ์ง๋ง isEqualsTo()
๊ฐ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๋น๊ตํ๋ฏ๋ก fail์ด๋ค.
๋ด์ฉ์ ๋น๊ตํ๋ ค๋ฉด isEqualToComparingFieldByFieldRecursively()
๋ฅผ ์ฌ์ฉํ๋ค.
assertThat(fido).isEqualToComparingFieldByFieldRecursively(fidosClone);
โ๏ธ ์ฐธ๊ณ ๋ก ํ์ดํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉด์ ํ์ด์๊ฒ ๋ค์๋๋ฐ assertEquals
๋ณด๋ค assertThat
์ด
์ข ๋ ์ง๊ด์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ assertThat()
์ ์ฌ์ฉํ๋ผ๊ณ ์๋ ค์คฌ๋ค.
Boolean Assertions
- isTrue()
- isFalse()
assertThat("".isEmpty()).isTrue();
Iterable/Array Assertions
Iterable/Array์ ํน์ ์์๊ฐ ์กด์ฌํ๋์ง ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ ์๋ค.
์ฌ๊ธฐ์๋ ํน์ ์์๊ฐ ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ค.
List<String> list = Arrays.asList("1", "2", "3");
assertThat(list).contains("1");
Example
list๊ฐ ๋น์ด ์์ง ์์ ๊ฒฝ์ฐ
assertThat(list).isNotEmpty();
list๊ฐ ์ฃผ์ด์ง ๋ฌธ์๋ก ์์ํ๋ ๊ฒฝ์ฐ
assertThat(list).startsWith("1");
๋์ผํ ๊ฐ์ฒด์ ํ๋ ์ด์์ assertion์ ์์ฑํ๋ ค๋ ๊ฒฝ์ฐ ์ฒด์ด๋์ ํตํด ์ฝ๊ฒ ๊ฒฐํฉํ ์ ์๋ค.
assertThat(list)
.isNotEmpty()
.contains("1")
.doesNotContainNull()
.containsSequence("2", "3");
Character Assertions
Character์ ๋ํ assertions๋ ๋น๊ต ๋์ ๋ฌธ์๊ฐ ์ ๋์ฝ๋ ํ ์ด๋ธ์ ์๋์ง ํ์ธํ๋ ์์ ์ ํฌํจํ๋ค.
Example
๋ฌธ์๊ฐ โaโ๊ฐ ์๋๊ณ ์ ๋์ฝ๋ ํ ์ด๋ธ์ ์๋์ง, โbโ๋ณด๋ค ํฌ๊ณ ์๋ฌธ์์ธ์ง ํ์ธํ๋ assertion
assertThat(someCharacter)
.isNotEqualTo('a')
.inUnicode()
.isGreaterThanOrEqualTo('b')
.isLowerCase();
Class Assertions
ํด๋น ํ๋, ํด๋์ค ์ ํ, annotations์ ์กด์ฌ ๋ฑ์ ์ฒดํฌํ๋ค.
Example
ํด๋น ํด๋์ค๊ฐ Runnable์ธ์ง ํ์ธ
assertThat(Runnable.class).isInterface();
ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ํ ๋น ๊ฐ๋ฅํ์ง ํ์ธ
assertThat(Exception.class).isAssignableFrom(NoSuchElementException.class);
File Assertions
์ง์ ๋ File ์ธ์คํด์ค๊ฐ ์กด์ฌ ํ๋์ง, ๋๋ ํ ๋ฆฌ ๋๋ ํ์ผ์ธ์ง,
ํน์ ์ฝํ
์ธ ๊ฐ ์๋์ง, ์ฝ์ ์ ์๋์ง ๋๋ ํ์ฅ๋ช
์ด ์๋์ง ํ์ธํ๋ค.
Example
ํ์ผ์ด ์กด์ฌํ๊ณ , ๋๋ ํ ๋ฆฌ๊ฐ ์๋ ํ์ผ์ด๋ฉฐ, ์ฝ๊ณ ์ธ ์ ์๋์ง ํ์ธ
assertThat(someFile)
.exists()
.isFile()
.canRead()
.canWrite();
Double / Float / Integer Assertions
์ฃผ์ด์ง Offset ์์์ ํน์ ์๋ ์ซ์ ๊ฐ์ ๋น๊ตํ๋ค.
assertThat(5.1).isEqualTo(5, withPrecision(1d));
InputStream Assertions
- hasSameContentAs(InputStream expected)
assertThat(given).hasSameContentAs(expected);
Map Assertions
๋งต์ ํน์ ํญ๋ชฉ, entry, key/value ๊ฐ์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ค.
Example
๋งต์ด ๋น์ด์์ง ์๊ณ ํค 2๋ฅผ ํฌํจํ๋ฉฐ, ํค 10์ ํฌํจํ์ง ์๊ณ (2, โaโ)๋ฅผ ํฌํจํ๋์ง ํ์ธ
assertThat(map)
.isNotEmpty()
.containsKey(2)
.doesNotContainKeys(10)
.contains(entry(2, "a"));
Throwable Assertions
์์ธ ๋ฉ์์ง, ์คํ ์ถ์ ๊ฒ์ฌ, ์์ธ๊ฐ ์ด๋ฏธ throw ๋์๋์ง ํ์ธ
Example
์ฃผ์ด์ง ์์ธ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํ๊ณ โcโ๋ก ๋๋๋ ๋ฉ์์ง๊ฐ ์๋์ง ํ์ธ
assertThat(ex).hasNoCause().hasMessageEndingWith("c");
๊ต์ก์์ ์ด Throwable Assertions๋ก ์์ธ๋ฅผ ๋ฐ์์์ผฐ๋์ง ํ์ธํ๋ค.
assertThatThrownBy()
์ assertThatExceptionOfType()
๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํจ์ ๊นจ๋ฌ์๋ค.
- assertThatThrownBy() : Java 8 exception assertion ํ์ค ์คํ์ผ
-
assertThatExceptionOfType() : ์์ธ ํด๋์ค ๋ฃ๊ธฐ ``` @Test @DisplayName(โํน์ ์์น ๋ฌธ์ ๊ฐ์ ธ์ค๊ธฐ hasโ) public void charGetFromString1() { String name = โFortuneโ; int index = 10;
assertThatThrownBy(() -> { name.charAt(index); }).isInstanceOf(IndexOutOfBoundsException.class) .hasMessageContaining(โ%dโ, index); }
@Test @DisplayName(โํน์ ์์น ๋ฌธ์ ๊ฐ์ ธ์ค๊ธฐ withโ) public void charGetFromString2() { String name = โFortuneโ; int index = 10;
assertThatExceptionOfType(IndexOutOfBoundsException.class)
.isThrownBy(() -> {
name.charAt(index);
}).withMessageContaining("%d", index); } ```
java8์์ ๋ ์ ์ฉํ๊ฒ. . .
- java7
assertThat(fellowshipOfTheRing) .filteredOn("race", HOBBIT) .containsOnly(sam, frodo, pippin, merry);
- java8
assertThat(fellowshipOfTheRing) .filteredOn(character -> character.getRace().equals(HOBBIT)) .containsOnly(sam, frodo, pippin, merry);