Elixir:
테스트 작성하기

어떻게?

Elixir는 매우 강력하고 사용하기 쉬운 내장 테스트 프레임워크인 ExUnit을 사용합니다. 기본 예는 다음과 같습니다:

  1. Elixir 프로젝트의 test 디렉토리에 새 테스트 파일을 생성합니다. 예를 들어, MathOperations 모듈을 테스트한다면 테스트 파일은 test/math_operations_test.exs가 될 수 있습니다.
# test/math_operations_test.exs
defmodule MathOperationsTest do
  use ExUnit.Case

  # 덧셈 함수를 확인하기 위한 간단한 테스트 케이스입니다
  test "두 수의 덧셈" do
    assert MathOperations.add(1, 2) == 3
  end
end

테스트를 실행하기 위해서는 터미널에서 mix test 명령어를 사용하세요. 만약 MathOperations.add/2 함수가 두 숫자를 올바르게 더한다면, 다음과 같은 출력을 볼 수 있습니다:

..

완료 시간 0.03초
1 테스트, 0 실패

외부 서비스나 API를 다루는 테스트의 경우 실제 서비스에 접속하지 않기 위해 mox와 같은 모의 라이브러리를 사용할 수 있습니다:

  1. mix.exsmox를 의존성에 추가하세요:
defp deps do
  [
    {:mox, "~> 1.0.0", only: :test},
    # 기타 의존성...
  ]
end
  1. 테스트 도우미(test/test_helper.exs)에 모의 모듈을 정의하세요:
Mox.defmock(HTTPClientMock, for: HTTPClientBehaviour)
  1. 테스트 케이스에서 모의를 사용하세요:
# test/some_api_client_test.exs
defmodule SomeAPIClientTest do
  use ExUnit.Case
  import Mox

  # 이는 Mox가 예상대로 이 모의가 호출되었는지 확인하도록 지시합니다
  setup :verify_on_exit!

  test "API에서 데이터를 가져옵니다" do
    # 모의 응답 설정
    expect(HTTPClientMock, :get, fn _url -> {:ok, "모의 응답"} end)
    
    assert SomeAPIClient.get_data() == "모의 응답"
  end
end

mix test를 실행할 때, 이 설정은 실제 외부 의존성으로부터 단위 테스트를 격리시켜, 자체 코드의 동작에 집중할 수 있게 합니다. 이 패턴은 외부 서비스 상태나 인터넷 연결 여부에 관계없이 테스트가 빠르고 신뢰성 있게 실행되도록 보장합니다.