Recommended 자바모델 클래스에 날개를달자_롬복(Lombok)
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육
Spring test mvc 발표자료
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
RxAndroid: 비동기 및 이벤트 기반 프로그래밍을 위한 라이브러리
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
(쿼리 변환, Query Transformation,서브쿼리푸시,SubQuery Pushing)SQL튜닝을 위해 서브쿼리의 드라이빙을 제어...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
Backbone.js :tips & tricks
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
06.실행환경 실습교재(easy company,해답)
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
06.실행환경 실습교재(easy company,문제)
Showdown of the Asserts by Philipp Krenn
More Related Content 자바모델 클래스에 날개를달자_롬복(Lombok)
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
What's hot (20) (SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육
Spring test mvc 발표자료
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
RxAndroid: 비동기 및 이벤트 기반 프로그래밍을 위한 라이브러리
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
(쿼리 변환, Query Transformation,서브쿼리푸시,SubQuery Pushing)SQL튜닝을 위해 서브쿼리의 드라이빙을 제어...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
Backbone.js :tips & tricks
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
06.실행환경 실습교재(easy company,해답)
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
06.실행환경 실습교재(easy company,문제)
Viewers also liked (12) Showdown of the Asserts by Philipp Krenn
"Design and Test First"-Workflow für REST APIs
Illia Seleznov - Integration tests for Spring Boot application
Advanced junit and mockito
Writing and using Hamcrest Matchers
JUnit Kung Fu: Getting More Out of Your Unit Tests
JUnit 5 - from Lambda to Alpha and beyond
Mocking in Java with Mockito
Similar to JUnit & AssertJ (11)
Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.]
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
Backend Master | 3.2.1 Test - JUnit
Effective unit testing ch3. 테스트더블
More from Sunghyouk Bae (16) JUnit5 and TestContainers
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backend 2017
Alternatives of JPA/Hibernate
Kotlin coroutines and spring framework
Java naming strategy (자바 명명 전략)
SpringBoot with MyBatis, Flyway, QueryDSL
JUnit & AssertJ
8. @Slf4j
public class Calculator {
/**
* 더하기
*
* @param nums 더하기 할 숫자들
* @return 합
*/
public double add(double... nums) {
log.trace("더하기... nums={}", nums);
double sum = 0.0;
for (double n : nums) {
sum += n;
}
log.debug("합={}", sum);
return sum;
}
}
@Slf4j
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calculator = new Calculator();
Assertions.assertThat(calculator.add(1, 2)).isEqualTo(3);
}
}
@Slf4j
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calculator = new Calculator();
assertThat(calculator.add(1, 2)).isEqualTo(3);
assertThat(calculator.add(-1, -2)).isEqualTo(-3);
assertThat(calculator.add()).isEqualTo(0);
}
}
13. @Slf4j
public class JUnitAnnotationTest {
private static Calculator calc;
@BeforeClass
public static void setupClass() throws Exception {
log.debug("Before Class...");
calc = new Calculator();
Thread.sleep(100L);
}
@Before
public void setup() {
log.debug("Before ...");
}
@After
public void cleanup() {
log.debug("@After...");
}
@AfterClass
public static void cleanupClass() {
log.debug("After Class...");
}
@Test
public void test1() {
log.debug("test1");
assertThat(calc).isNotNull();
}
@Test
public void test2() {
log.debug("test2");
assertThat(calc).isNotNull();
}
}
2016-01-15 11:40:55,935 DEBUG k.k.java.study.JUnitAnnotationTest.setup : Before ...
2016-01-15 11:40:55,935 DEBUG k.k.java.study.JUnitAnnotationTest.test1 : test1
2016-01-15 11:40:55,960 DEBUG k.k.java.study.JUnitAnnotationTest.cleanup : @After...
2016-01-15 11:40:55,961 DEBUG k.k.java.study.JUnitAnnotationTest.setup : Before ...
2016-01-15 11:40:55,962 DEBUG k.k.java.study.JUnitAnnotationTest.test2 : test2
2016-01-15 11:40:55,962 DEBUG k.k.java.study.JUnitAnnotationTest.cleanup : @After...
Before Class...2016-01-15 11:40:55,831 DEBUG k.k.java.study.JUnitAnnotationTest.setupClass : Before Class...
2016-01-15 11:40:55,962 DEBUG k.k.java.study.JUnitAnnotationTest.cleanupClass : After Class...
19. ImportAssertions class
import static org.assertj.core.api.Assertions.*;
import static org.assertj.core.api.Assertions.assertThat; // Main Assertion
import static org.assertj.core.api.Assertions.atIndex; // 리스트 검증
import static org.assertj.core.api.Assertions.entry; // Map 검증
import static org.assertj.core.api.Assertions.tuple; // 클래스에서 속성 추출 시 사용
import static org.assertj.core.api.Assertions.fail; // 예외 검증 시 사용
import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown;
import static org.assertj.core.api.Assertions.filter; // 컬렉션 필터링
import static org.assertj.core.api.Assertions.offset; // 부동소숫점 수형 관련
import static org.assertj.core.api.Assertions.anyOf; // 컨디션 적용
import static org.assertj.core.api.Assertions.contentOf; // 파일 관련 검증
21. import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown;
// ... 생략
assertThat(fellowshipOfTheRing).hasSize(9);
// 일반적으로 예외 발생에 대한 검증 처리
try {
fellowshipOfTheRing.get(9); // 예외 발생!!!
// 여기까지 코드가 오는 것은 기대했던 예외가 발생하지 않았다는 뜻! 검증 실패
fail("IndexOutOfBoundsException expected because fellowshipOfTheRing has only 9 elements");
} catch (IndexOutOfBoundsException e) {
assertThat(e).hasMessage("Index: 9, Size: 9");
}
// 주의점 : Throwable 로 catch 하면 안된다.
// 그러면 fail로 발생한 AssertionError 도 catch 해서 검증 성공으로 인식해 버린다.
// 다른 방식
try {
fellowshipOfTheRing.get(9); // 예외 발생!!
// 기대했던 예외가 발생하지 않았다는 뜻! 검증 실패
failBecauseExceptionWasNotThrown(IndexOutOfBoundsException.class);
} catch (IndexOutOfBoundsException e) {
assertThat(e).hasMessage("Index: 9, Size: 9");
}
With Java 7
22. @Test
public void testException() {
assertThatThrownBy(() -> { throw new Exception("boom!")
}).isInstanceOf(Exception.class)
.hasMessageContaining("boom");
}
With Java 8
@Test
public void testException() {
// given some preconditions
// …
// when
Throwable thrown = catchThrowable(() -> { throw new Exception("boom!") });
// then
assertThat(thrown).isInstanceOf(Exception.class) .hasMessageContaining("boom");
}
With Java 8 BDD
23. // 두 인스턴스가 같은 배우이고, 속성 중 종족 값만 같은 경우...
// fredo 와 sam 은 다른 사람이지만 같은 호빗족이다.
assertThat(frodo).isNotEqualTo(sam);
// raceComparator 가 Comparator<AClass> 이면서 race 값만 비교하는 경우
assertThat(frodo).usingComparator(raceComparator).isEqualTo(sam);
// 절대반지 그룹에 간달프는 속해있지만, 사우론은 아니다
assertThat(fellowshipOfTheRing).contains(gandalf).doesNotContain(sauron);
// 하지만 종족을 비교하는 raceComparator 를 사용하면 사우론도 간달프와 같은 Maia 종족이다.
assertThat(fellowshipOfTheRing)
.usingElementComparator(raceComparator)
.contains(sauron);
usingElementComparator(Comparator) example:
usingComparator(Comparator) example: