C#에서 Unit Test로 개발하던 도중 Unit Test로 진행 시 app.config 파일을 읽어올 수 없어서 문제가 발생했습니다.
위와 같이 NullReferenceException이 발생하면서 파일을 찾아오지 못하는것 같았습니다.
해결책을 찾던 중 Test프로젝트의 경우 config를 참조하는 경로가 다른데
C:\workspace\VS\projectName\project\bin\Debug\netcoreapp3.1\testhost.dll.config
라는 파일에서 읽어오는것 같더군요.
따라서 해당 폴더에 파일(\netcoreapp3.1\testhost.dll.config)을 만들어서 아래 파일에
config를 설정하면 정상적으로 읽어올 수 있는 것 같았습니다.
다만 문제는 PC의 환경이 바뀌는 경우 정상적으로 동작하지 못할것 같다고 판단되어서 다른 해결책이 없는지 다음과 같은 기준으로 찾아보았습니다.
1. AppConfig 파일을 그대로 쓸수 없는가 ?
2. 자동으로 testhost.dll.config를 생성할 수 없는가 ?
위 두가지를 기준으로 찾아봤는데 다행히 유사하게나마 구현할 방법을 찾았습니다.
해결책
1) 다음과 같이 프로젝트에 App.config를 생성하고 사용할 설정값들을 입력합니다.
2) 해당 테스트 프로젝트의 ~.csproj(Visual Studio의 경우 해당 프로젝트를 더블클릭하면 들어가집니다.) 파일에 들어와 아래의 코드를 입력합니다.
<Target Name="CopyCustomContent" AfterTargets="AfterBuild">
<Copy SourceFiles="App.config" DestinationFiles="$(OutDir)\testhost.dll.config" />
</Target>
전체 코드를 보면 다음과 같습니다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
<PackageReference Include="MSTest.TestAdapter" Version="2.1.1" />
<PackageReference Include="MSTest.TestFramework" Version="2.1.1" />
<PackageReference Include="coverlet.collector" Version="1.3.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\test\test.csproj" />
</ItemGroup>
<Target Name="CopyCustomContent" AfterTargets="AfterBuild">
<Copy SourceFiles="App.config" DestinationFiles="$(OutDir)\testhost.dll.config" />
</Target>
</Project>
위와 같이 코드를 작성하면 따로 testhost.dll.config를 작성하지 않더라도 프로젝트 빌드 시 자동으로 생성되어 정상적으로 config를 참조할 수 있게됩니다.
'개발언어 > C#' 카테고리의 다른 글
[C#][Razor] @inject 지시문 (0) | 2020.09.16 |
---|---|
C# IBatis.Net 사용하기 (0) | 2019.11.20 |