Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use user secrets in a dotnet core test project

Tags:

I want to store a database connection string for my integration tests as a user secret. My project.json looks like this:

{   ...    "dependencies": {     ...     "Microsoft.Extensions.Configuration.UserSecrets": "1.1.0"           },    "tools": {     "Microsoft.Extensions.SecretManager.Tools": "1.1.0-preview4-final"   },    "userSecretsId": "dc5b4f9c-8b0e-4b99-9813-c86ce80c39e6" } 

I've added the following to the constructor of my test class:

IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()     .AddJsonFile("appsettings.json")     .AddUserSecrets(); 

However when I run the tests the following exception is thrown when it hits that line:

An exception of type 'System.InvalidOperationException' occurred in Microsoft.Extensions.Configuration.UserSecrets.dll but was not handled in user code  Additional information: Could not find 'UserSecretsIdAttribute' on assembly 'dotnet-test-nunit, Version=3.4.0.0, Culture=neutral, PublicKeyToken=null'. 

Have I missed something or is what I'm trying to do not supported?

like image 785
Paul Hunt Avatar asked Jan 30 '17 17:01

Paul Hunt


1 Answers

See instructions in https://patrickhuber.github.io/2017/07/26/avoid-secrets-in-dot-net-core-tests.html, in particular in InitialiseTest add

// the type specified here is just so the secrets library can              // find the UserSecretId we added in the csproj file             var builder = new ConfigurationBuilder()                 .AddUserSecrets<HttpClientTests>();              Configuration = builder.Build() 

However note that it will not allow to run tests on build server

like image 62
Michael Freidgeim Avatar answered Sep 22 '22 19:09

Michael Freidgeim