openlang

통합 테스트에서 다른 워크스페이스 크레이트의 바이너리를 실행하려면?

여러 크레이트가 있는 워크스페이스에서 한 크레이트의 통합 테스트가 다른 크레이트의 라이브러리가 아닌 실행 파일 타깃에 의존하고 실행하게 하려면 어떻게 해야 하나요?

워크스페이스 구조는 이래요:

workspace/
├── rillmere_probe/
│   └── tests/check.rs
└── rillmere_exec/
    ├── src/lib.rs
    └── src/main.rs

rillmere_probe 크레이트는 rillmere_exec를 dev-dependency로 지정해요. 테스트에서도 rillmere_exec의 바이너리를 실행해야 해요. 전에는 잘 됐어요. 그런데 rust-nightly의 build-layout-v2 변경으로 위치가 바뀌면서 assert_cmd-2.1.3이 rillmere_exec의 실행 파일 타깃을 찾지 못해요. assert_cmd-2.2.2의 진단은 더 명확해요: CARGO_BIN_EXE_rillmere_exec is unset. 이걸 보니 assert_cmd가 이런 상황을 지원하기는 하는지 모르겠어요. 저만 이런 문제를 겪은 건 아닐 텐데요. 해결하신 분 있나요?

영어에서 번역원문 보기

이어지는 대화 4

서로의 근거를 따라
  1. 고유 링크

    방법은 이것들뿐인 것 같아요

    -

    가능한 코드를 main.rs에서 lib.rs로 옮기세요(afaik 제대로 된 프로젝트에서는 이미 보통 이렇게 하죠). main.rs는 호출만 하게 하고요. main.rs에 한 줄짜리 호출만 남겨도 되죠 :v, 그러면 다른 프로젝트에서 코드를 쓰기 더 쉬워요

    -

    실행 파일을 빌드하고 실행한 다음 std::command로 오류를 읽어서 수동으로 테스트하세요

    영어에서 번역원문 보기
  2. 고유 링크

    오, 좋네요! 딱 찾던 기능이에요. 이 통합 테스트에만 nightly가 필요한 건 괜찮아요. 그래도 크레이트의 나머지는 stable Rust로 컴파일됐으면 해요. 그러려면 안정 컴파일러에서 이 테스트를 건너뛸 방법을 알아봐야겠네요. 테스트 전체를 별도 크레이트로 옮겨야 할지도 모르겠어요. 이상적이지는 않아도 쓸 만해요. 바이너리 내용을 전부 라이브러리로 옮기는 것보다는 이쪽이 좋아요.

    영어에서 번역원문 보기
  3. 고유 링크

    이 통합 테스트에만 nightly가 필요한 건 괜찮아요

    아티팩트 의존성은 rustc 컴파일러가 아니라 cargo의 불안정 기능이에요.

    아쉽게도 cargo 매니페스트에는 조건부 컴파일 플래그에 해당하는 것이 없어요. 안정 버전 cargo는 그 매니페스트 자체를 읽지 못하므로, 이 기능을 개별 통합 테스트에만 켜고 패키지의 나머지 크레이트는 안정 버전 cargo에서 사용 가능하게 두는 건 불가능해요.

    따라서 아티팩트 의존성을 쓰려면 통합 테스트 크레이트를 별도 패키지(정확히는 별도 워크스페이스)에 넣어서 다른 패키지와 구분되는 Cargo.toml를 갖게 해야 해요.

    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. docker-compose 콘솔 출력 줄이기

    개발 환경에서 docker-compose up으로 모든 서비스를 시작하면 컨테이너 몇 개가 수백 줄씩 출력을 쏟아내요. 이 출력을 간편하게 걸러 낼 수 있을까요? 아니면 더 좋게는 docker-compose up이 실행되는…

    답글 3최근 활동 bash
  2. C 대신 D로 Python 확장 모듈을 만들 수 있을까요?

    D는 C와 링크할 수 있다고 하더군요. D로 Python 확장 모듈을 작성하고 싶어요. 제가 놓친 이유 때문에 이 방법이 아예 불가능한 건 아닐까요?

    답글 2최근 활동 d
  3. Micro 플러그인을 Nix에서 선언할 수 있나요?🤔

    python에서는 이렇게 쓸 수 있어요: Python.withPackages (q: with q; [ fastapi ]) Micro 에디터에도 같은 방식이 있나요? micro 에디터 패키지와 플러그인을 함께 지정할 수 있나요…

    답글 3최근 활동 nix