"DLL 참조"란 빌드의 결과물인 어셈블리(.dll) 파일을 직접 사용하는 참조 방식입니다.
.dll 파일은 보통 bin/ 폴더의 하위 폴더에 들어 있죠.
만약 비주얼 스튜디오에서 작업하는 경우라면,
우선, 테스트 대상 프로젝트를 깃 저장소에서 끌어 와서 로컬 컴퓨터에 솔루션을 만듭니다. (이하 “팀 솔루션”) 이 솔루션을 빌드하면, bin/ 폴더에 빌드된 결과물(.dll)이 생기겠죠?
그 다음, 테스트를 위한 별도의 솔루션을 생성합니다.
프로젝트 템플릿은 xunit, nunit 이든 원하는 것을 사용하면 됩니다. (이하 “테스트 솔루션”)
DLL 참조
테스트 솔루션에 있는 테스트 프로젝트에 우클릭 하고, [추가]=>[프로젝트 참조]를 선택한 다음,
팀 솔루션의 빌드 결과물인 .dll 파일을 찾아 선택합니다.
그러면 테스트 프로젝트의 [종속성] 항목(솔루션 탐색기에 있음)에 “어셈블리” 항목이 뜨고 그 아래에 방금 추가한 어셈블리가 등록되어 있을 것입니다.
물론, 테스트 프로젝트의 .csproj 파일 내부에도, <reference> 항목으로 추가되어 있을 것입니다.
이때부터, 테스트 프로젝트에서 테스트 대상 프로젝트의 객체를 사용할 수 있습니다.(테스트 코드를 작성할 수 있습니다)
프로젝트 참조
테스트 솔루션에 우클릭 해서 [추가]=>[기존 프로젝트]를 선택하고, 팀 솔루션에 존재하는 테스트 대상 프로젝트의 .csproj 를 선택합니다.
그러면, 테스트 대상 프로젝트가 테스트 솔루션에 추가됩니다. 그 다음, 테스트 프로젝트에 우클릭하고, [추가]=>[프로젝트 참조] 를 클릭하면, 방금 추가한 프로젝트를 선택합니다. 그러면, 테스트 대상 프로젝트가 테스트 프로젝트의 참조 프로젝트로 등록됩니다.
.csproj 파일에는 <projectreference> 항목으로 등록됩니다.
이때부터, 테스트 대상 프로젝트의 코드를 테스트 할 수 있습니다.
프로젝트 참조는 코드 단위 참조이기에, 테스트 대상 프로젝트의 코드도 변경할 수 있습니다.
그래서, 애초에 끌어오기를 할 때 분기를 시켜서 끌어와야겠죠?
그리고, 테스트 프로젝트가 팀 솔루션과 분리되었기에, 이를 깃허브에 올릴 지 말지는 본인의 선택입니다. (올리는 게 좋겠죠?)
패키지 참조
테스트 대상 프로젝트를 아예 패키지로 빌드하고, 누겟 저장소에 등록합니다.
코드가 오픈되는 저장소인 “누겟 갤러리” 등이 부담스럽다면, 아래의 글을 참조하여 개인적 저장소를 만들고,
누겟 패키지 관리자를 통해 패키지를 프로젝트에서 사용할 수 있습니다.
이렇게 참조하면, <packagerefernce> 항목으로 추가됩니다.
어디서 줏어 들었는데, DLL 참조보다는 패키지 참조가 더 권고되는 방식이라고 합니다.
기본적으로는 디버깅 시에 더 많은 정보에 접근가능하고, 추가적으로 버전업 여부가 자동으로 관리되는 이득이 있다고 합니다. DLL 파일은 빌드 후에 신규 버전이 있는 지 없는지를 알 길이 없지만, 누겟 배포시스템은 이에 대한 정보를 알려주기 때문입니다.