与Ioptions和KeyVault的集成测试
我正在尝试为我在代码库中拥有的广告服务编写集成测试,但是我要测试的服务要求将IOPTIONS传递给构造函数。更糟糕的是,我们正在为我们的配置使用Azure密钥库。
这是我到目前为止的测试:
[Fact]
public void Test_GetAccessToken_GetsAccessToken()
{
//Arrange
var azureAdOptions = Options.Create(new AzureAd());
var aadService = new MyPortal.Services.Implementations.AadService(azureAdOptions);
//Act
var accessToken = aadService.GetAccessToken();
//Assert
Assert.NotEmpty(accessToken);
}
目前由于Azuread对象的属性为无效,因此目前失败了。
我的问题是,鉴于我正在测试中,并且所有这些东西都发生在启动cos.cs& program.cs文件*
这是我的program.cs文件,在其中配置了keyVault。
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context,config) =>
{
var settings = config.Build();
#if (!DEBUG)
var keyVaultName = settings["KeyVaultName"];
if (!string.IsNullOrEmpty(keyVaultName))
{
config.AddAzureKeyVault(keyVaultName);
}
#endif
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
I'm trying to write an integration test for an AD Service I have in my codebase, however the service I'm testing requires IOptions to be passed in to the constructor. To make matters worse we are using azure key vault for our config.
Here is my test so far:
[Fact]
public void Test_GetAccessToken_GetsAccessToken()
{
//Arrange
var azureAdOptions = Options.Create(new AzureAd());
var aadService = new MyPortal.Services.Implementations.AadService(azureAdOptions);
//Act
var accessToken = aadService.GetAccessToken();
//Assert
Assert.NotEmpty(accessToken);
}
This currently fails as the AzureAd object's properties are null.
my question is, how do I populate that object from Key Vault, given I'm in a test and all that stuff happens in the Startup.cs &
Program.cs files*
This is my Program.cs file, where KeyVault is configured.
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context,config) =>
{
var settings = config.Build();
#if (!DEBUG)
var keyVaultName = settings["KeyVaultName"];
if (!string.IsNullOrEmpty(keyVaultName))
{
config.AddAzureKeyVault(keyVaultName);
}
#endif
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您将其作为集成测试,则可以尝试使用Web应用程序工厂。
这应该加载您的整个程序,包括使用实际依赖项的启动。
此nuget软件包称为mvc.testing,您可以找到有关它的更多信息此处
You could try to use a Web Application Factory if you're doing this as an integration test.
This should load up your entire program including startup using the actual dependencies.
This nuget package is called mvc.testing and you can find some more information on it here