Tengo la siguiente configuración appsettings.json.
"SettingsConfig": [ { "Name": "Something", "Node": "Something", "SettingName": "Something" }, { "Name": "Something", "Node": "Something", "SettingName": "Something" }]Quiero escribir UnitTest, pero la siguiente sintaxis no funciona.
_configuration = A.Fake<IConfiguration>(); A.CallTo(() => _configuration.GetSection("SettingsConfig")).Returns(new List<SettingsConfig>());Mensaje de error: IConfigurationSection no contiene una definición para Devoluciones.
¿Cómo se puede simular IConfiguration con la sintaxis FakeItEasy para aplicar datos simulados para UnitTesting?
Primero, debe implementar el método que lee del archivo, que existe en los proyectos de prueba unitaria. Por lo tanto, si no hay un archivo .json que pueda leer, no podrá GetSection en absoluto. Así que agregue el archivo allí y luego aplique:
private IConfiguration ApplyConfiguration() { var configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddJsonFile("settingsConfig.json"); var config = configurationBuilder.Build(); config.GetSection("settingsConfig").Get<List<SettingsConfig>>(); return config; }Luego, en su lógica de negocios, agregue:
var config = ApplyConfiguration();Verá que config contiene toda la configuración allí, por lo que no es necesario llamar a OnCall .Returns() en absoluto.
Si observa el valor de retorno de IConfiguration.GetSection() , verá que espera devolver una IConfigurationSection . Ese es el primer problema aquí.
Más allá de eso, para sacar su Lista de la configuración, necesitaría hacer algo como
_configuration.GetSection("SettingsConfig").Get<List<SettingsConfig>>(); Desafortunadamente, el método .Get<> en una IConfigurationSection es un método de extensión que FakeItEasy no puede falsificar. Obtendrá el siguiente error:
The current proxy generator can not intercept the method Microsoft.Extensions.Configuration.ConfigurationBinder.Get... - Extension methods can not be intercepted since they're static.
Deberá colocar otra interfaz frente a IConfiguration que envuelve el método de extensión si necesita probarlo.
De lo contrario, para falsificar su archivo de configuración, podría hacer algo como lo siguiente:
var fakeConfigSection = A.Fake<IConfigurationSection>(); A.CallTo(() => fakeConfigSection["Name"]) .Returns("MyFakedConfigValue"); var fakeConfig = A.Fake<IConfiguration>(); A.CallTo(() => fakeConfig.GetSection("SettingsConfig")) .Returns(fakeConfigSection);