본문 바로가기

분류 전체보기274

JUnit 테스트 순서 제어하기 JUnit 테스트 순서 제어하기 @FixMethodOrder는 3가지 정렬 옵션을 가지고 있습니다. 속성 설명 MethodSorters.DEFAULT HashCode를 기반으로 순서가 결정되기 때문에 사용자가 예측하기 힘듭니다. MethodSorters.JVM JVM에서 리턴되는 순으로 실행됩니다. 때에 따라서 실행시 변경됩니다. MethodSorters.NAME_ASCENDING 메소드 명을 오름차순으로 정렬한 순서대로 실행됩니다. @FixMethodOrder(MethodSorters.SORT방식) MethodSorters.DEFAULT MethodSorters.JVM MethodSorters.NAME_ASCENDING 2019. 11. 1.
JUnit Test Rule 알아보기 JUnit Test Rule 알아보기 JUnit Test Rule에 대하여 알아보도록 하겠습니다. JUnit의 Rule이란?? Rule은 테스트 클래스에서 동작 방식을 재정의하거나 쉽게 추가하는 것을 말합니다. 사용자는 기존의 Rule을 재사용하거나 확장하는 것이 가능합니다. JUnit Rule 종류 JUnit은 사용할 수 있는 여러 가지 Rule이 존재합니다. (아래의 표 참고) 여러 가지 Rule에 대하여 자세히 알아보겠습니다. 기본 Rule 클래스 규칙 이름 설명 Rule Description TemporaryFolder 임시폴더 관리. 테스트 후 삭제 ExternalResources 자원(DB, 파일, 소켓) 관리 ErrorCollector 지속적 테스트 실패 수집 Verifier 별개 조건 확인.. 2019. 11. 1.
PowerMock 알아보기 PowerMock 알아보기 Mockito가 지원하는 기능은 간단한 기능의 유닛 테스트에는 충분하지만 코드 구조가 복잡할 경우 테스트하기에 힘든 부분이 있습니다. 혹은 반대로, 테스트를 위해서 좋은 코드 구조를 포기해야만 하는 경우도 있습니다. PowerMock은 그런 문제들을 피해 유닛 테스트를 할 수 있게 도와줍니다. PowerMock 시작하기 PowerMock은 두 개의 확장 API로 구성됩니다. 하나는 EasyMOck와 Mockito입니다. PowerMock을 사용하려면 위의 두 테스트 프레임워크 중 하나에 의존을 해야 합니다. 또한 PowerMock은 Junit 및 TestNG을 지원합니다.(둘 다 자바의 유닛 테스트 프레임워크입니다.) build.gradle에 dependency 추가하기 rep.. 2019. 10. 29.
Mockito-Kotlin Sample로 자세히 알아보기 Mockito-Kotlin Sample로 자세히 알아보기 #Mockito Features에 대한 문서를 글쓴이가 Kotlin으로 해석한 샘플입니다. 틀린 것이나 좀 더 나은 코드가 있다면 댓글로 남겨주시면 감사하겠습니다 :) #Mockito Features 원문 https://www.javadoc.io/static/org.mockito/mockito-core/3.1.0/org/mockito/Mockito.html contents 1. Mock객체의 동작(Behavior)을 검증해보기 @Test fun `mock_will_memorize_all_interaction`() { val mockedList = mock() mockedList.add("one") mockedList.clear() //검증하기 , .. 2019. 10. 28.
Mockito-Kotlin 알아보기 Mockito-Kotlin 알아보기 Mockito는 유닛 테스트를 위한 Java mocking framework입니다. Mockito를 사용하여 쉽게 Mock Object를 만들어 관리할 수 있습니다. Mockito는 현재 Kotlin과 함께 작동하지만 구문이 최적이 아닙니다. Kotlin에서는 모든 클래스가 기본적으로 final로 선언되어있어 Mockito는 기본적으로 mocking을 할 수 없는 등의 여러 문제가 있습니다. 그래서 Niek Haarman이 유지 관리하는 mockito-kotlin 라이브러리를 사용하도록 하겠습니다. (글 쓴 시점으로는 Mockito lib는 kotlin을 공식 지원하지는 않지만 추후 제공 계획이 있다고 합니다.) Mockito-Kotlin 기본 사용법 dependenc.. 2019. 10. 28.
Test Double(테스트 더블)알아보기 Test Double(테스트 더블) 알아보기 xUnit Test Patterns의 저자인 제라드 메스자로스(Gerard Meszaros)가 만든 용어로, 스턴트 더블(영화 촬영에서 말하는 스턴트 대역 배우)에서 아이디어를 얻어서 만든 용어입니다. Test Double소개 제라드 메스자로스는 아래와 같이 Test Double을 소개합니다. When we are writing a test in which we cannot (or chose not to) use a real depended-on component (DOC), we can replace it with a Test Double. The Test Double doesn’t have to behave exactly like the real DOC; .. 2019. 10. 28.
Test Stub이란 ? Test Stub이란 ? stub에 대하여 알아보도록 하겠습니다 stub이란 ? stub이란 토막,꽁초,남은부분,몽당연필.. 이라는 뜻으로 dummy객체가 마치 실제로 동작하는 것 처럼 보이도록 만들어놓은 것입니다. https://en.wikipedia.org/wiki/Test_stub Test stub - Wikipedia In computer science, test stubs are programs that simulate the behaviours of software components (or modules) that a module undergoing tests depends on. “ Test stubs provide canned answers to calls made during the t.. 2019. 10. 28.
BDD 알아보기 BDD 알아보기 BDD는 TDD둘다 소프트웨어 개발 방법입니다. TDD는 Test Driven Development로 테스트 주도 개발이라 합니다. 테스트를 먼저 작성하고, 그 뒤에 테스트케이스를 통과하는 코드를 작성하는 방식으로 테스트가 주도하는 개발 방법입니다. 그렇다면 BDD는 무엇일까요 ? BDD란?? 무엇일까 BDD는 (Behavior Driven Development )로 TDD를 근간으로 파생된 개발 방법입니다. TDD에서 한 발 더 나아가 테스트케이스 자체가 요구사양이 되도록 하는 개발방법입니다. BDD를 통해 개발을 하게 된다면 테스트 메소드의 이름을 "이 클래스가 어떤 행위를 해야한다 (should do someting)" 라는 식의 문장으로 작성하여 행위에 대한 테스트에 집중할 수 있.. 2019. 10. 28.
[Design Pattern] Visitor Pattern [Design Pattern] Visitor Pattern Visitor Pattern에 대하여 알아보고, java와 kotlin 예제를 알아보도록 하겠습니다. Visitor Pattern이란?? Visitor Pattern은 데이터 구조와 연산을 분리하여 데이터 구조의 원소들을 변경하지 않고 새로운 연산을 추가할 수 있는 패턴입니다. 새로운 연산을 추가하려면 새로운 방문자를 추가하기만 하면 됩니다. 구조 Visitor Pattern은 기본적으로 위와 같은 구조로 작성됩니다. Element interface를 구현하는 Concrete가 여러 개 생성되고, Visitor Interface를 구현하는 Concrete가 accept메서드의 파라미터로 전달됩니다. Visigtor Pattern은 Composit.. 2019. 10. 21.
[Design Pattern] State Pattern [Design Pattern] State Pattern state pattern에 대하여 알아보고, java와 kotlin 예제를 봐보도록 하겠습니다. State Pattern이란?? State Pattern은 일련의 규칙에 따라 객체의 상태(State)를 변화시켜, 객체가 할 수 있는 행위를 바꾸는 패턴입니다. 상태에 따라 행동이 변화하는 객체엔 모두 적용할 수 있습니다. 특징 State Pattern은 객체의 특정 상태를 클래스로 선언하고, 클래스에서는 해당 상태에서 할 수 있는 행위들을 메서드로 정의합니다. 그리고 이러한 각 상태 클래스들을 인터페이스로 캡슐화하여, 클라이언트에서 인터페이스를 호출하는 방식을 말합니다. State Pattern with Java public interface Powe.. 2019. 10. 21.
[Design Pattern] Chain of Responsibility Pattern [Design Pattern] Chain of Responsibility Pattern Chain of Responsibility Pattern 패턴에 대하여 알아보고, 자바와 코틀린 예제를 알아보도록 하겠습니다. Chain of Responsibility Pattern이란???? 요청 처리가 들어오게 되면 그것을 수신하는 객체가 자신이 처리할 수 없는 경우에는 다음 객체에게 문제를 넘김으로써 최종적으로 요청을 처리할 수 있는 객체의 의해 처리가 가능하도록 하는 패턴입니다. 하나의 예로 자바의 try /catch / finally가 해당됩니다. try 블록 안에서 Exception이 발생하면 catch 블록으로 이동하여 catch블록을 실행하게 되는 것입니다. 구조 ● Handler : 요청을 처리하기 .. 2019. 10. 21.
[Design Pattern] Command Pattern [Design Pattern] Command Pattern Command Pattern에 대하여 알아보고 , 자바 코틀린 예제를 보고 확인해보도록 하겠습니다. Command Pattern이란?? 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴 즉, 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할 때 유용합니다. 실행될 기능을 캡슐화함으로써 기능의 실행을 요구하는 호출자(Invoker) 클래스와 실제 기능을 실행하는 수신자(Receiver) 클래스 사이의 의존성을 제거합니다. 따라서 실행될 기능의 변경에도 호출자 클래스를 수정 없이 그대로 사용할 수 있도록 줍니다. 클래스.. 2019. 10. 21.
[Design Pattern] Interpreter Pattern [Design Pattern] Interpreter Pattern Interpreter Pattern에 대하여 알아보고 , 자바 코틀린 예제를 봐보도록 하겠습니다. Interpreter Pattern이란???? 문법 규칙을 클래스화 한 구조로써, 일련의 규칙으로 정의된 언어를 해석하는 패턴입니다. 문법 규칙이 많아지면 복잡해지고 무거워지기 때문에 그럴 땐 차라리 파서/컴파일러 생성기를 쓰는 게 좋습니다. 언어 분석기라고 생각하면 되며, 스크립트나 컴파일러 문법 등이 있을 수 있습니다. 예로 SQL 구문이나 shell 커멘드 해석기, 통신 프로토콜 등이 있습니다. 특징 표현(Expression) interface(혹은 abstract class)를 생성하고 Expression인터페이스를 구현하는 구상 클래.. 2019. 10. 21.
가변인자 알아보기 ( ... , vararg 가변 인자 알아보기 자바의 가변 인자와 코틀린의 가변 인자를 비교하여 알아보도록 하겠습니다. Java의 가변인자 자바는 오버 로딩을 통하여 매개변수의 개수와 타입이 달라도 같은 이름의 메서드명으로 동일 기능을 구현할 수 있습니다. 그런데.. String divide(String s1, String s2){...} String divide(String s1, String s2, String s3){...} String divide(String s1, String s2, String s3, String s4){...} String divide(String s1, String s2, String s3, String s4, String s5){...} 위와 같이 매개변수가 끝없이 많아진다면..? 위 같은 문제를.. 2019. 10. 18.
Concrete class == 구상클래스, 구현클래스, 구체클래스?? Concrete class 객체지향 관련 서적을 보다 보면 원서에는 concrete class라고 되어있는 것이, 번역서에는 '구상 클래스', '구현 클래스' 또는 '구체 클래스'라고 번역되어 있습니다. 이 이름을 보고 나서 이게 구체적으로 어떤 클래스를 의미하는 것인지 크게 와닿지 않아 정리합니다. 정리 정의한 모든 연산(operation)이나 일부 연산의 구현을 서브클래스로 넘기는 추상 클래스(abstract class)나 객체의 연산에 대한 구현이 포함되어 있지 않고 정의만 존재하는 인터페이스를 통해 인스턴스를 만들 수 없습니다. 당연하게도 완성되지 않은 설계도를 가지고 제품을 만들 수는 없기 때문입니다. 모든 연산에 대한 구현을 가지고 있는 클래스를 뭐라고 할까? 바로 concrete class .. 2019. 10. 18.
[Design Pattern] Iterator Pattern [Design Pattern] Iterator Pattern Iterator Pattern(반복자 패턴)에 대하여 알아보고 예제도 java와 kotlin예제를 봐보도록 하겠습니다. Iterator Pattern이란? Iterator Pattern은 접근 기능과 자료구조를 분리시켜 객체화합니다. 서로 다른 구조를 가지고 있는 저장 객체에 대해서 접근하기 위해서 interface를 통일시키고 싶을 때 주로 사용합니다. ex) for(int i=0;i 2019. 10. 18.
[Design Pattern] Mediator Pattern [Design Pattern] Mediator Pattern mediator(중재자) 패턴에 대하여 알아보고 예시를 java로 작성한 예와 kotlin으로 작성한 예를 보도록 하겠습니다. Mediator Pattern 이란? mediator pattern은 클래스 간의 상호작용을 하나의 클래스에 위임하여 처리하는 패턴입니다. M:N의 관계에서 M:1의 관계로 복잡도를 떨어뜨려 유지보수 및 확장성에 유리합니다.(의존성이 적어집니다.) 다른 객체의 존재를 모르는 상태에서도 메시지를 주고받을 수 있습니다. 특징 ConcreteColleague클래스는 Colleague(동료) interface를 구현하고 있는 N개의 객체입니다. ConcreteCollegue 클래스 간 데이터 전달을 위하여 Mediator를 이.. 2019. 10. 18.
[Design Pattern] Memento Pattern [Design Pattern] Memento Pattern 이번에는 메멘토 패턴에 대하여 알아보고 예제도 봐보도록 하겠습니다. Memento Pattern이란?? 메멘토 패턴은 객체의 상태 정보를 저장하고 사용자의 필요에 의하여 원하는 시점의 데이터를 복원할 수 있는 패턴입니다. Memento Pattern 특징 Memento Pattern은 3개의 액터 클래스를 사용합니다. 메멘토에는 복원할 개체의 상태가 포함됩니다. Originator : 현재 State를 가지고, Memento 객체와 Memento 객체 상태를 얻게 합니다. Memento : State를 가지고 있는 인스턴스입니다. CareTaker : Memento를 순서대로 저장합니다. Memento Pattern with Java public.. 2019. 10. 17.
[Design Pattern] Observer Pattern [Design Pattern] Observer Pattern 알아보기 Observer Pattern에 대한 개념에 대하여 알아보고 예시를 통해 알아보도록 하겠습니다. Observer Pattern이란? 한 객체의 상태 변화에 따라 다른 객체의 상태도 연동되도록 일대다 객체 의존 관계를 구성하는 패턴입니다. Observer Pattern의 상태를 전달하는 방법 Observer Pattern의 상태를 전달하는 방법은 두 가지가 있습니다. PUSH : 주제 객체가 구독 객체에게 상태를 보내는 방식 PULL : 구독 객체가 주제 객체에게서 상태를 가져가는(요청하는) 방식 어떨 때 쓰면 좋을까?? 데이터의 변경이 발생하였을 때 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 사용합니다. O.. 2019. 10. 15.
Java - Comparable, Comparator Java Comparable, Comparator "caAbBC"와 같은 알파벳 문자열을 "aAbBcC"와 같은 알파벳 순서로 정렬하는 코드를 작성하려면 어떻게 해야할까요 ? 위 문제를 위한 코드를 자바로 작성한다면, 아마도 정렬을 실실하는 코드를 작성하되 그 안에서 문자들에 대한 비교 연산을 새로 정의하는 형태로 작성해야 할 것입니다. 위 문제에 핵심은 '비교연산' 을 구현하는데에 있습니다. 그냥 단순히 문자열을 char 배열로 바꾸고 각 char 형으로 정렬하고자 한다면 비교하는데 쓰이는 값이 ASCII값이므로 자연율로 정렬해버리게됩니다. ABCDabcd와 같은 형태가 되겠죠 위처럼 자연율(일반적인 정렬순서)가 아니라 사용자가 새롭게 정렬 순서를 정의하고 싶거나 오브젝트를 정렬할 때 오브젝트 정렬에 .. 2019. 10. 15.
Java 8 - More Functional Interface!! Java 8 - More Functional Interface 이전 포스트에서 functional Interfcae에 대하여 알아보았었습니다. 이전 포스트 보러 가기 - https://beomseok95.tistory.com/277 Java 8 - Function Interface Java 8 - Function Interface Java SDK 8의 java.util.function 패키지에는 수많은 Functional Interface들이 등록되어 있습니다. 이 패키지에 등록되어 있는 모든 인터페이스들은 @FunctionalInterface로 지정되.. beomseok95.tistory.com 이번 글에서는 더 자세히 Functional Interface에 대하여 파보도록 하겠습니다.(이전포스트과 겹.. 2019. 10. 13.
Java 8 - Function Interface Java 8 - Function Interface Java SDK 8의 java.util.function 패키지에는 수많은 Functional Interface들이 등록되어 있습니다. 이 패키지에 등록되어 있는 모든 인터페이스들은 @FunctionalInterface로 지정되어 있으며 API 문서에는 다음과 같은 설명이 추가되어 있습니다. This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference. 이것은 Functional Interface이며 그러므로 람다식이나 메서드 레퍼런스를 위한 할당 대상으로 사용될 수 있습니다. Functiona.. 2019. 10. 13.
함수와 메소드 뭐가다를까? 입력 함수와 메서드 뭐가 다를까? 함수라는 용어를 쓰다가 메서드를 만났을 때, 메서드라는 용어를 쓰다가 함수를 만났을 때 ​"그게 뭐가 중요한데? 메서드나 함수나 그게 그거 아닌가?"​ ​"그래서 무슨 차이가 있는데?" 대학시절 학교에서 배웠을 때는 ​"C언어에서는 함수, Java에서는 메서드라고 하면 됩니다." 라고 합니다. 함수와 메서드 공통점과 차이점 함수와 메서드의 공통적인 부분이라고 한다면, 내가 원하는 무엇인가를 처리한다는 것에 있어서 동일합니다. 가장 큰 차이는 - 함수는 독립적으로 존재 - 로직 처리 이후 사용자가 원하는 결과를 반환합니다 - 메서드는 클래스에 종속되어 존재 -해당 클래스에 대한 객체가 생성되어야 (static의 경우는 생각하지 말자) 사용할 수 있다는 것입니다. 2019. 10. 13.
Java 8 - Interface바뀐점을 알아보기 Java 8 - Interface바뀐점을 알아보기 Java 8부터 interface에 많은 변화가 생겼는데 java 8이 처음 출시된 것은 2014년 3월 18일입니다. Lamda 표현식, Stream API, Optional , Completable 등의 여러 가지가 추가되었지만 이글에서는 interface의 변경점에 대하여 알아보도록 하겠습니다. Java 8의 변경점 - 인터페이스가 가질 수 있는 것들 1.1 상수 필드(public static final) public interface Parent{ public static final MAX_VALUE = 100; public static final MIN_VALUE = 0; } 1.2 추상 메서드(public abstract) public inte.. 2019. 10. 11.