특정 입력을 기반으로 상세한 파일을 빌드하는 기존 레거시 프로세스에 통합 테스트를 래핑하려면 파일의 전체 경로를 제공하여 동적으로 DLL을로드해야합니다.런타임시 C# .NET 통합 테스트의 내부에서 실제 경로를 찾는 방법은 무엇입니까?
이 테스트는 항상 동일한 물리적 응용 프로그램 디렉토리를 공유하지는 않지만 연속적 통합 프로세스를 통해 많은 서버에서 실행되며 때로는 응용 프로그램의 여러 인스턴스 동일한 실제 시스템에서 실행됩니다. 요점은 이 테스트에 하드 코드 할 때 사용할 수있는 표준 경로가 없음입니다. 필자가 실제로 필요로하는 것은 테스트가 실행되는 시점에 실제 경로가 실행되고 있다는 것을 알 수있는 메커니즘입니다. 그런 다음 상대 경로를 사용하여 응용 프로그램의 설치에서 DLL을 항상 안정적으로 찾을 수 있습니다.
테스트 중이므로 HttpContext.Current.Server.MapPath() 또는 Request.ApplicationPath와 같은 것에 의존 할 수 없습니다. 왜냐하면 Current는 테스트가 실행될 때 null이 될 것이기 때문입니다.
DLL을 배포하기 위해 해킹을 작성하지 않아요. 응용 프로그램을 빌드하고 실행할 수있는 드라이브 루트의 특수 폴더에 동적으로로드해야합니다. 실제 경로를 찾기 위해 .NET 전략을 잘 알고 있습니다. 런타임시 테스트?
그래서이 작업을 수행 할 필요가 간단한 테스트는 다음과 같이 것, 승인 시험 스타일의 주장과 함께, C#을 웹 응용 프로그램에서 NUnit를 사용하고 있습니다
[Test]
public void ShouldGenerateFileConsistently()
{
string pathToDll = FindRelativePathToDllBasedOnPhysicalPath(); // <-- what I need to figure out
string generatedFileContents = OutputManager.GenerateReportUsingDynamicDll(pathToDll);
Approvals.Verify(generatedFileContents);
}
것이 무엇 "마구 자르기"? DLL을 사용하는 응용 프로그램과 함께 DLL을 배포하는 옵션 인 경우 [DependencySharp] (https://github.com/evanwon/dependencysharp)에서 더 쉽게 관리 할 수 있습니다. – TeaDrivenDev
나는 아래 답변이 다른 질문에서 허용 된 대답보다 낫다고 주장하지만, 나는 속임수로 이것을 막았다. – spender