Ich beginne mit Unit-Tests. Ich habe eine Methode, die die web.config für eine Verbindungszeichenfolge verwendet.
Ich hatte gehofft, verwenden zu können
[DeploymentItem("web.config")]
Um die Webkonfigurationsdatei zu erhalten, bleiben mir immer noch Nullreferenzausnahmen (dafür würde ich meinen nächsten Test schreiben).
Wie verwende ich die Konfigurationsdatei, die in dem Projekt enthalten ist, das ich testen möchte?
Ich verwende das in VS 2008 enthaltene Testframework, wenn dies einen Unterschied macht.
Vielen Dank
.net
asp.net
unit-testing
ilivewithian
quelle
quelle
Antworten:
Unit-Test-Projekte sollten eine eigene Konfigurationsdatei haben.
In einem Testprojekt können Sie Hinzufügen, Neues Element, Anwendungskonfigurationsdatei auswählen.
Diese Datei verhält sich genau wie eine web.config, jedoch für Ihre Komponententests.
quelle
Sie können eine web.config oder app.config von jedem Ort aus mit laden
OpenMappedExeConfiguration
. Stellen Sie sicher, dassSystem.Configuration
es zu den Referenzen Ihres Projekts hinzugefügt wird.ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap() fileMap.ExeConfigFilename = @"c:\my-web-app-location\web.config" Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); string connectionString = config.AppSettings.Settings["ConnectionString"].Value;
Hier ist die web.config, ziemlich Standard.
<?xml version="1.0"?> <configuration> <configSections> </configSections> <appSettings> <add key="ConnectionString" value="Data Source=XXXX;Initial Catalog=XXX; Trusted_Connection=True;"/> </appSettings> </configuration>
Update am 29.09.2017
Ich habe eine Klasse entwickelt, um das Lesen von AppSetitngs aus einer Datei zu erleichtern. Ich habe die Idee von Zp Bappi .
public interface IAppSettings { string this[string key] { get; } } public class AppSettingsFromFile : IAppSettings { readonly Configuration Config; public AppSettingsFromFile(string path) { var fileMap = new ExeConfigurationFileMap(); fileMap.ExeConfigFilename = path; Config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); } public string this[string key] { get { return Config.AppSettings.Settings[key].Value; } } }
Hier erfahren Sie, wie Sie die Klasse verwenden.
IAppSettings AppSettings = new AppSettingsFromFile(@"c:\my-web-app-location\web.confg"); string connectionString = AppSettings["ConnectionString"];
quelle
Kopieren Sie Ihre Datei web.config in den Ordner "/ bin" und benennen Sie sie in "AppName.dll.config" um.
Wobei "AppName" - der Name der resultierenden Assembly ist.
Ich habe diesen Hack oft benutzt.
quelle
Sie möchten, dass Ihre Ergebnisse klar definiert und wiederholbar sind. Dazu müssen Sie mit bekannten Daten arbeiten, damit Sie sowohl Ihre Normalfälle als auch Ihre Grenzfälle klar definieren können. In meiner Arbeit ist dies immer ein bestimmter Server und ein bestimmter Datensatz, sodass im Unit-Testing-Modul die Verbindungszeichenfolge integriert ist. Andere bevorzugen die Verwendung einer Verbindungszeichenfolge aus dem Unit-Testing-Projekt. Ich habe noch nie jemanden gesehen, der die Verwendung der Konfigurationsdatei der Website empfohlen hat! (Entwicklung oder anders)
quelle
Ich würde empfehlen, den Konfigurationsleseteil zu abstrahieren, damit er verspottet werden kann. So etwas finden Sie in der Antwort von Jon_Lindeheim. Wie lese ich die Web.Config-Datei beim Debuggen von Unit-Testfällen?
quelle
Wenn Sie eine Verbindungszeichenfolge benötigen, schreiben Sie keinen Komponententest (vorausgesetzt, Sie verwenden die Verbindungszeichenfolge, um zur Datenbank zu gelangen). Unit-Tests dürfen nicht mit der Außenumgebung interagieren. Sie sollten alle nach jedem Check-in ausführen, damit sie besser mit Lichtgeschwindigkeit ausgeführt werden.
Für einen Komponententest möchten Sie Ihren Code von Ihrer Datenbank isolieren. Ändern Sie Ihre Tests (und ggf. den Code, den Sie testen) so, dass Sie zum Testen nicht in die Datenbank gehen müssen.
quelle