ich wahrscheinlich aus der Erklärung beginnen sollte würde, dass in .NET Core-Anwendung, die Sie nicht Instanz von IConfiguration
auf Ihre Controller oder andere Klassen passieren sollten. Sie sollten stark typisierte Einstellungen verwenden, die über IOtions<T>
eingegeben werden. Siehe diesen Artikel für weitere Details: Options pattern in ASP.NET Core.
Wenn Sie das Optionsmuster verwenden, haben Sie POCO für die Einstellungen, die von einem Controller benötigt werden. Diese Einstellungen Objekt wird dann in der Steuerung in IOptions<T>
gewickelt injiziert:
public class ControllerSettings
{
public string Setting1 { get; set; }
public int Setting2 { get; set; }
// ...
}
public class Controller
{
private readonly ControllerSettings _settings;
public Controller(IOptions<ControllerSettings> options)
{
_settings = options.Value;
}
}
Dann ziemlich einfach es ist keine Einstellungen zu übergeben Sie von einem Unit Test wollen. Füllen Sie einfach Einstellungen Instanz und wickeln zu IOptions<T>
mit einem der verfügbaren spöttischen Frameworks, wie Moq oder NSubstitute:
[TestMethod]
public void SomeTest()
{
var settings = new ControllerSettings
{
Setting1 = "Some Value",
Setting2 = 123,
};
var options = new Mock<IOptions<ControllerSettings>>();
options.Setup(x => x.Value).Returns(settings);
var controller = new Controller(options.Object);
// ...
}
Manchmal reale Konfiguration des Projekts zu verwenden, es ist erforderlich, wenn beispielsweise Integrationstest zu entwickeln. In diesem Fall könnten Sie eine Instanz von ConfigurationBuilder
erstellen und diese mit den gleichen Konfigurationsquellen wie im getesteten Code füllen:
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
// Duplicate here any configuration sources you use.
configurationBuilder.AddJsonFile("AppSettings.json");
IConfiguration configuration = configurationBuilder.Build();