Table base testScalaTest는 PropertyBaseTest 스타일 역시 지원해줍니다.제일 간단하게 사용하는 방법은 단순히 TableDrivenPropertyChecks trait를 상속받으면 됩니다. 테스트를 위한 객체들은 Table class를 통해 만들 수 있습니다.Table의 첫 번째 인자는 제공해줄 객체들의 설명, 두 번째 이후부터는 실제 객체들을 넣으면 됩니다.Scala의 튜플 제한으로 인해 한 문장에 최대 22개까지만 객체를 넣을 수 있습니다.import org.scalatest.funspec.AnyFunSpecimport org.scalatest.matchers.should.Matchersimport org.scalatest.prop.TableDrivenPropertyChe..
scala
Scala 공식 문서에 따르면 함수의 파라미터가 0인 함수일경우 괄호를 넣을 수도 있고 괄호를 생략할 수도 있습니다.이러한 언어적 규칙은 프로그래머에게 자유도를 제공하지만 규칙없는 개발은 사용자 입장에서 큰 혼란을 불러일으킬 수 있습니다.Scala는 괄호의 유무를 언어적으로 강제하지는 않고, 권장사항을 작성해서 Scala 개발자가 이를 따르도록 유도하고 있습니다. 괄호를 사용해야 할 경우공식 문서에서는 괄호를 사용해야 할 경우를 아래처럼 설명하고 있습니다.However, this syntax should only be used when the method in question has no side-effects (purely-functional). In other words, it would be acc..
ScalaTest는 Scala에서 기본적으로 제공해주는 타입인 Option, Either에 대한 테스트도 지원해줍니다.이 역시 간편하게 trait 형태로 제공해주어 필요할경우 상속받아 사용하면 됩니다. Option testOption 테스트를 위해서 OptionValues trait를 지원해줍니다.해당 trait를 상속받으면 Option 타입에 implicit function으로 value 함수를 신규로 지원해주어 이를 통해 assertion 비교를 진행하면 됩니다. Option의 값을 비교하기 위해 간단히 get을 사용하면 되지 않나 얘기하실 수도 있는데 None에 get을 실행하면 NoSuchElementException이 던져져서 테스트가 실패하지만 어느 테스트에서 실패했는지 StackDepth를 ..
ScalaTest에서는 테스트 결과를 검증하기 위해서 assert와 함께 should, shouldBe, must, mustBe 등의 assert 함수를 제공해줍니다.should나 must 등의 함수는 내부적으로 assert와 동일하지만, 문장을 이해하기 쉽게 해주기 위한 syntax sugar 역할로 이해하면 됩니다.should, must도 동일하게 동작하지만 테스트 결과의 뉘앙스 차이를 주는 것이니 원하는 문장을 사용하면 됩니다. Assertionassert를 적용하기 위한 방법은 trait, import의 두 가지 방법이 있습니다.trait를 사용하는 것이 조금 더 보편적이고, import를 사용해도 크게 상관없습니다.import org.scalatest.funspec.AnyFunSpecimport..

Scala 언어에도 다양한 테스트 라이브러리가 존재하는데 그 중 대표적인 테스트 라이브러리로 ScalaTest가 존재합니다.ScalaTest는 사용하기도 쉽고, 사용법도 scala에 잘 어울리며 다양한 Mock 라이브러리 연동도 지원해주면서 테스트 스타일도 굉장히 다양하게 지원해주어서 개인적으로 사용중인 라이브러리이기도 합니다.만약 테스트를 작성해야 한다면 ScalaTest를 적용해보기를 추천합니다. ScalaTest 설치ScalaTest를 설치하려고 결정했다면 build.sbt에 의존성을 추가해주기만 하면 사용 가능합니다.Scalatic 라이브러리도 설치할 수 있는데 그냥 유틸리티 라이브러리이므로 사용하지 않아도 됩니다. 저도 사용한 적은 없습니다.ThisBuild / version := "0.1.0-..
이번 글에서는 단위 테스트에서 설명해주는 목에 대해 알아보겠습니다. 테스트와 목(Mock)목은 세부 분류로 들어가면 더미, 스텁, 스파이, 목, 페이크의 다섯 가지 유형으로 구분됩니다.이 다섯 가지 유형은 크게 두 가지 분류로 나뉘어서 목과 스텁의 두 가지 분류로 구분됩니다. 목(Mock)목은 외부로 나가는 상호 작용을 모방하고 검사하는데 도움이 되는 도구입니다. 이러한 상호 작용은 SUT가 상태를 변경하기 위한 의존성을 호출하는 것에 해당합니다. 대표적인 예시로는 이메일 발송과 같이 Side effect가 있는 호출이 있습니다. 목은 다시 목(mock)과 스파이(spy)의 두 분류로 나눠지는데, 스파이는 목과 동일하지만 단지 프로그래머가 수동으로 작성한다는 차이만 있습니다. 최근의 Mockito나 Mo..

이번 글에서는 단위 테스트 책에 적혀있는 단위 테스트의 4대 요소를 설명하겠습니다. 좋은 단위 테스트좋은 단위 테스트는 회귀 방지, 리팩터링 내성, 빠른 피드백, 유지 보수성의 4개 요소를 종합해서 평가합니다. 각 요소별로 특징이 있고, 아쉽게도 4 요소를 모두 만족하게 테스트를 짜는 것은 불가능합니다. 4 요소의 특징을 살펴보고, 어떤 요소에 더 중점을 둬야 하는지 알아보겠습니다. 회귀 방지테스트에서 얘기하는 회귀는 소프트웨어의 버그입니다. 소프트웨어의 버그란 코드를 수정한 후에 이전까지 정상적으로 돌아갔던 기능이 동작하지 않는 경우를 말합니다. 프로그래머에게 있어 코드는 자산이 아니라 책임입니다. 자신이 맡은 책임을 지기 위해 새롭게 기능이 구현될 때 마다 의도된 대로 제대로 동작하는지 테스트 코드를..

이 글은 단위 테스트 책에 적혀있는 단위 테스트의 세 가지 속성과 테스트의 대표적인 두 분파인 고전파와 런던파에 대해 설명하겠습니다. 단위 테스트의 세 가지 속성단위 테스트는 아래의 세 가지 속성을 가집니다.작은 코드 조각(단위) 검증빠르게 수행격리된 방식으로 처리하는 자동화된 테스트1번과 2번은 너무나도 당연한 속성이라 이견이 없지만 3번은 사람마다 다양한 해석이 존재하고, 이로 인해 고전파와 런던파라는 두 분파가 생겼습니다. 고전파모든 사람이 단위 테스트와 테스트 주도 개발에 원론적으로 접근하는 방식을 따르기를 원한다고 해서 고전파(classic)라고 부릅니다.켄트 백의 테스트 주도 개발이 주요 저서입니다. 고전파는 테스트를 작성할 때 아래의 규칙을 지키며 작성합니다.의존성은 공유 의존성을 제외하고 ..