본문 바로가기

개발언어/C#

[C#] Unit Test에서 ConfigurationManager로 config 파일 읽어오기



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