F # : 다른 프로젝트에서 내부 모듈을 테스트하는 방법은 무엇입니까?

Aug 19 2020

.Net 설명서 의 모범 F # 사례를 따릅니다 .

  • 애플리케이션 용 프로젝트를 생성합니다 (라이브러리가 아닌 콘솔).
  • 테스트 용 프로젝트를 만듭니다 (Expecto를 사용하지만 중요하지 않음).

문제점 : 일부 애플리케이션 모듈이 internal키워드 를 통해 노출되지 않습니다 . 따라서 내 테스트 프로젝트에서 이러한 모듈을 가져올 수 없습니다.

=> 이러한 모듈의 단위 테스트를 어떻게 수행 할 수 있습니까? 내부 액세스 제어를 제거해야합니까?

감사!

답변

1 Abel Aug 19 2020 at 17:45

을 테스트하려면을 internal사용 InternalsVisibleTo하고 개인 클래스를 테스트 하려면 테스트 프로젝트의 파일을 링크 할 수 있습니다 ( "파일 추가"대화 상자에있는 경우 열기 대신 링크를 선택할 수 있음).

그러나 이미 언급했듯이 일반적으로 공용 인터페이스 만 테스트합니다. 그러나 때로는 복잡한 내부도 별도로 테스트하고 싶습니다. 예를 들어 .NET 런타임 라이브러리에서 이것은 종종 수행되며 (복잡한 내부가 많이 있음) 링크 접근 방식을 많이 사용합니다.

private은 실제로 클래스에 대해 비공개를 의미하고 확장 메서드에서 이러한 멤버에 액세스 할 수도 없기 때문에 이러한 멤버를 공용 멤버로 자신의 개인 클래스에 배치해야합니다. 이렇게하면 링크 할 때 클래스와 멤버에 액세스 할 수 있지만 프로덕션 버전에서는 둘 다 액세스 할 수 없습니다.

이 기술은 개인 정보를 테스트 시스템에 바인딩하고 내부 구현을 자유롭게 변경할 수 없기 때문에 아껴서 사용하십시오.