xUnit 프로젝트 내에서 dotnet IConfiguration 사용
내 필요는 리포지토리에 커밋하지 않고 UI 테스트 내에서 비밀을 사용하는 것입니다(즉, 웹 앱을 테스트하기 전에 로그인하기 위해).
나는 다른 솔루션을 읽고 많은 타사 라이브러리를 찾았지만 결국 간단한 접근 방식을 선택했습니다. 몇 줄의 코드를 다양한 요구 사항에 쉽게 적용할 수 있고 여전히 로컬 개발 및 CI/CD 환경 모두에서 작동합니다.
데모 목적으로 간단한 github repo을 만들었습니다.
기본적으로 2개의 파일이 있습니다.
그런 다음 해당 파일을 출력 디렉터리에 복사하여 .csproj에 추가해야 합니다.
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
<None Update="appsettings.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
<None Update="appsettings.local.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
이제 코드입니다.
모든 테스트에서 IConfiguration을 설정하기 위한 유틸리티 클래스(
TestConfigHelper
)를 만듭니다(필요에 따라 이 클래스를 조정할 수 있습니다. 예는 다음에서 보고됩니다).여기에서 구성 서비스를 구성합니다.
public static IConfigurationRoot GetIConfigurationRoot()
{
return new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile("appsettings.local.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
}
이 코드에서는 다음 세 위치에서 구성을 가져옵니다.
순서가 중요합니다. appsetting.local.json은 appsetting.json을 재정의하고 환경 변수는 모든 것을 재정의합니다.
이러한 방식으로 로컬 개발에 appsetting.local.json을 사용할 수 있지만 CI/CD 파이프라인의 환경 변수를 통해 민감한 데이터를 주입할 수도 있습니다.
테스트는 구성 호출
TestConfigHelper::GetIConfigurationRoot
메서드를 로드하는 BaseTestClass에서 상속해야 합니다.그리고 그게 다야. 이제 모든 테스트에서
GetIConfigurationRoot
에서 반환된 개체를 사용하여 구성에 액세스할 수 있습니다.보너스 #1 - 구성 클래스
내 애플리케이션 구성을 나타내는 클래스를 만들고 구성에 바인딩하는 것을 좋아합니다.TestConfigHelper
에 이에 대한 예가 있습니다. 코드는 다음과 같습니다(여기서 MyAppConfig
는 구성을 나타내는 클래스이며 구성 파일의 "MyApp"루트 노드에 저장됨).
public static MyAppConfig GetMyAppConfiguration()
{
var configuration = new MyAppConfig();
GetIConfigurationRoot().Bind("MyApp", configuration);
return configuration;
}
보너스 #2: 사용자 비밀
또한 로컬 개발을 위해 사용자 비밀을 구성할 수 있습니다. 이를 위해서는 더 많은 구성이 필요합니다.
public static MyAppConfig GetMyAppConfiguration()
{
var configuration = new MyAppConfig();
GetIConfigurationRoot().Bind("MyApp", configuration);
return configuration;
}
또한 로컬 개발을 위해 사용자 비밀을 구성할 수 있습니다. 이를 위해서는 더 많은 구성이 필요합니다.
dotnet user-secrets init
dotnet user-secrets set key value
.csproj
파일에 추가:<UserSecretsId>your-secret-id-here</UserSecretsId>
TestConfigHelper.cs
에서 비밀도 구성합니다.public static IConfigurationRoot GetIConfigurationRoot()
{
return new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile("appsettings.local.json", optional: true, reloadOnChange: true)
.AddUserSecrets("e3dfcccf-0cb3-423a-b302-e3e92e95c128") // <-- this is the new line !!
.AddEnvironmentVariables()
.Build();
}
Reference
이 문제에 관하여(xUnit 프로젝트 내에서 dotnet IConfiguration 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/andreav/using-dotnet-iconfiguration-inside-xunit-projects-4o6b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)