lemon

Rust Test

rust test를 실행하는 방법
Rust
Jun 19
·
8 min read

테스트 실행하기 - The Rust Programming Language

테스트 실행하기

테스트 실행 방식 제어하기

cargo run이 여러분의 코드를 컴파일 하고 난 뒤 그 결과인 바이너리를 실행하는 것과 마찬가지로, cargo test는 여러분의 코드를 테스트 모드에서 컴파일하고 결과로 발생한 테스트 바이너리를 실행합니다. 여러분은 커맨드 라인 옵션을 지정하여 cargo test의 기본 동작을 변경할 수 있습니다. 예를 들어, cargo test를 통해 생성된 바이너리의 기본 동작은 모든 테스트를 병렬적으로 수행하고 테스트가 ㅅ리행되는 도안 생성된 결과를 캡처하는 것으로, 테스트 결과와 연관된 출력을 읽기 쉽도록 화명네 표시하는 것을 막아버립니다.

어떤 커맨드 라인 옵션은 cargo test에 입력되고 어떤 옵션은 결과 테스트 바이너리에 입력됩니다. 이 두가지타입의 인자를 구분하기 위해서, cargo test에 주어질 인자를 먼저 나열하고 그 다음 구분자로 -- 를 넣고, 그 뒤 테스트 바이너리에 입력될 인자를 나열하빈다. cargo test —help를 실행하는 것은 cargo test에서 사용할 수 있는 옵션을 표시하고, cargo test — —help를 실행하는 것은 구분자 — 이후에 나올수 있는 옵션을 표시합니다.

  • 테스트를 병렬 혹은 연속으로 실행하기

    cargo test -- --test-threads=1
    
  • 함수 결과 보여주기

    cargo test -- --nocapture
    
  • 이름으로 테스트의 일부분만 실행하기

    cargo test one_hundred
    
  • 특별한 요청이 없는 한 몇몇 테스트들 무시하기

    #[test]
    #[ignore]
    fn expensive_test() {
    	// code that takes an hour to run
    }
    

테스트 조직화

이 장의 시작 부분에서 언급했듯이, 테스팅은 복잡한 분야이고, 여러 사람들이 서로 다른 용어와 조직화 방식을 이용합니다. 러스트 커뮤티니에서는 테스트에 대해서 두 개 의 주요한 카테고리로 나눠 생각합니다.

  • 단위 테스트: Unit Test

    단위 테스트는 작고 하나에 더 집중하며, 한 번에 하나의 모듈만 분리하여 테스트하고, 비공개 인터페이스(private interface)를 테스트합니다.

  • 통합 테스트: Integration Test

    통합 테스트는 완전히 여러분의 라이브러리 외부에 있으며, 공개 인터페이스(private interface)를 이용하고 테스트마다 여러 개의 모듈을 잠재적으로 실험함으로써**, 다른 외부의 코드가 하는 방식과 동일한 형태로 여러분의 코드를 이용**합니다.

두 종류의 테스트 작성 모두가 여러분의 라이브러리 코드 조각들이 따로따로 혹은 함께 사용되었을 때 여러분이 기대하는 바와 같이 동작하는 지를 확신시키는데 중요합니다.

단위 테스트

단위 테스트의 목적은 각 코드의 단위를 나머지 부분과 분리하여 테스트하는 것인데, 이는 코드가 어디 있고 어느 부분이 기대한 대로 동작하지 않는지를 빠르게 정확히 찾아낼 수 있도록 하기 위함입니다.

단위 테스트는 src 디렉토리 내에 넣는데, 각 파일마다 테스트하는 코드를 담고 있습니다. 관례는 각 파일마다 테스트함수를 담고 있는 tests라는 이름의 모듈을 만들고, 이 모듈에 cfg(test)라고 어노테이션 하는 것입니다.

통합 테스트

러스트에서 통합 테스트들은 완전히 여러분의 라이브러리 외부에 있습니다. 이들은 여러분의 라이브러리르 다른 코드들과 동일한 방식으로 이용하는데, 이는 이 외부 테스트들이 오직 여러분의 라이브러리의 공개 API 부분에 속하는 함수들만 호출할 수 있다는 의미입니다. 이들의 목적은 여러분의 라이브러리의 수많은 파트들이 함께 올바르게 동작하는지를 시험하는 것입니다.

그 자체로서는 올바르게 동작하는 코드의 단위들도 통합되었을 때는 문제를 일으킬 수 있으므로, 통합된 코드의 테스트 커버율 또한 중요합니다. 통합 테스트를 만들기 위해서는 tests 디렉터리를 먼저 만들 필요가 있습니다.

  • tests 디렉토리

    프로젝트 디렉토리의 최상위, 그러니까 src 옆에 tests 디렉토리를 만듭니다. 카고는 이 디렉토리 내의 통합 테스트 파일들을 찾을 줄 압니다. 그런 후에는 이 디렉토리에 원하는 만큼 많은 테스트 파일을 만들 수 있으며, 카고는 각각의 파일들을 개별적인 크레이트처럼 컴파일할 것입니다.

    한 번 통합 테스트를 만들어봅시다. Lising 11-12의 src/lib.rs 코드를 그대로 유지한 채로, tests 디렉토리를 만들고, tests/integration_test.rs 라는 이름의 새 파일을 만든 다음, Listing 11-13의 코드를 집어넣으세요.

    extern crate adder;
    
    #[test]
    fn it_adds_two() {
    	assert_eq!(4, adder::add_two(2));
    }
    

$ cargo test --test integration_test







rust + svelte + vite + tauri