분류 전체보기 1341

Ch02. Mockito - BDD 스타일 Mockito API

BDD: 애플리케이션이 어떻게 “행동”해야 하는지에 대한 공통된 이해를 구성하는 방법으로, TDD에서 창안했다. 행동에 대한 스펙 Title Narrative As a / I want / so that Acceptance criteria Given / When / Then Mockito는 BddMockito라는 클래스를 통해 BDD 스타일의 API를 제공한다. 참고 https://javadoc.io/static/org.mockito/mockito-core/3.2.0/org/mockito/BDDMockito.html https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#BDD_behavior_verification B..

Ch02. Mockito - Mock 객체 확인

Mock 객체가 어떻게 사용이 됐는지 확인할 수 있다. 특정 메서드가 특정 매개변수로 몇 번 호출되었는지, 최소 한 번은 호출됐는지, 전혀 호출되지 않았는지 Verifying exact number of invocations 어떤 순서대로 호출했는지 Verification in order 특정 시간 이내에 호출됐는지 Verification with timeout 특정 시점 이후에 아무 일도 벌어지지 않았는지 Finding redundant invocations @Test void verification(@Mock MemberService memberService, @Mock StudyRepository studyRepository){ StudyService studyService = new StudySe..

Ch02. Mockito - Mock 객체 Stubbing

모든 Mock 객체의 행동 Null을 리턴한다. (Optional 타입은 Optional.empty 리턴) Primitive 타입은 기본 Primitive 값. 컬렉션은 비어있는 컬렉션. Void 메소드는 예외를 던지지 않고 아무런 일도 발생하지 않는다. Mock 객체를 조작해서 특정한 매개변수를 받은 경우 특정한 값을 리턴하거나 예외를 던지도록 만들 수 있다. How about some stubbing? : https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#2 Argument matchers : https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockit..

Ch02. Mockito - Mockito 시작하기

Mockito 소개 Mock: 진짜 객체와 비슷하게 동작하지만 프로그래머가 직접 그 객체의 행동을 관리하는 객체. Mockito: Mock 객체를 쉽게 만들고 관리하고 검증할 수 있는 방법을 제공한다. https://site.mockito.org/ Mockito framework site Intro Why How More Who Links Training Why drink it? Mockito is a mocking framework that tastes really good. It lets you write beautiful tests with a clean & simple API. Mockito doesn’t give you hangover because the tests are very readab..

Ch01. JUnit5 - JUnit5 확장 모델

JUnit 4의 확장 모델은 @RunWith(Runner), TestRule, MethodRule. JUnit 5의 확장 모델은 단 하나, Extension. 확장팩 등록 방법 public class FindSlowTestExtension implements BeforeTestExecutionCallback, AfterTestExecutionCallback { private long THRESHOLD = 1000L; public FindSlowTestExtension(long THRESHOLD) { this.THRESHOLD = THRESHOLD; } @Override public void afterTestExecution(ExtensionContext extensionContext) throws Exc..

Ch01. JUnit5 - JUnit5 junit-platform.properties

JUnit 설정 파일로, 클래스 패스 루트 (src/test/resources/)에 넣어두면 적용된다. 테스트 인스턴스 라이프사이클 설정 junit.jupiter.testinstance.lifecycle.default = per_class 확장팩 자동 감지 기능 junit.jupiter.extensions.autodetection.enabled = true @Disabled 무시하고 실행하기 junit.jupiter.conditions.deactivate = org.junit.*DisabledCondition 무시하고 싶은 조건을 풀패키지경로를 적어주면 된다. junit.jupiter.displayname.generator.default = \ org.junit.jupiter.api.DisplayName..

Ch01. JUnit5 - JUnit5 테스트 순서

실행할 테스트 메서드 특정한 순서에 의해 실행되지만 어떻게 그 순서를 정하는지는 의도적으로 분명히 하지 않는다. (테스트 인스턴스를 테스트마다 새로 만드는 것과 같은 이유) 경우에 따라, 특정 순서대로 테스트를 실행하고 싶을 때도 있다. 그 경우에는 테스트 메소드를 원하는 순서에 따라 실행하도록 @TestInstance(Lifecycle.PER_CLASS)와 함께 @TestMethodOrder를 사용할 수 있다. 주의할 점: Jupiter을 Order를 사용해야 한다. 정렬 값이 낮을수록 높은 우선순위를 가진다.

Ch01. JUnit5 - JUnit5 테스트 인스턴스

JUnit은 테스트 메서드마다 테스트 인스턴스를 새로 만든다. 이것이 기본 전략. 테스트 메소드를 독립적으로 실행하여 예상치 못한 부작용을 방지하기 위함이다. 이 전략을 JUnit 5에서 변경할 수 있다. 어떤 걸어떤 걸 실행하여도 value값은 무조건 1이며, 매번 다른 hashcode값을 반환한다. 더이상 새로운 인스턴스를 메소드 마다 생성하는 것이 아닌 클래스마다 생성하므로 가은 hashCode값과, 더이상 @BeforeAll,@AfterAll에서 static메소드를 쓰지 않아도 된다.