it-swarm.com.de

ConfigurationManager kann nicht im Unit-Test-Projekt verwendet werden

Ich versuche, einen Komponententest für mein Projekt zu schreiben, aber der Configuration Manager kann nicht verwendet werden. Momentan ist mein Projekt so eingerichtet

ASP.Net-Anwendung (alle ASPX-Seiten)

ProjectCore (alle C # -Dateien - Modell)

ProjectTest (alle Tests)

in meinem ProjectCore kann ich über System.Configuration auf das ConfigurationManager-Objekt zugreifen und Informationen an das Projekt übergeben. Wenn ich jedoch einen Test mit dem ConfigurationManager durchführe, wird der Fehler angezeigt

System.NullReferenceException: Object reference not set to an instance of an object.

Hier ist ein Beispiel für den Test

using System.Configuration;

[TestMethod]
public void TestDatabaseExists()
{
    //Error when I declare ConfigurationManager
    Assert.IsNotNull(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString
}

in meinen anderen Tests ConfigurationManager.ConnectionStrings ["ConnectionString"]. ConnectionString ist die Konfigurationszeichenfolge meines Datenadapters und gibt bei den Tests einen Nullfehler zurück, jedoch nicht, wenn ich die Website tatsächlich benutze. Irgendwelche Ideen?

17
willykao

Dies kann eines von mehreren Problemen sein:

  1. Sie haben app.config nicht zu Ihrem ProjectTest-Projekt hinzugefügt.
  2. Sie haben in Ihrer app.config keine Verbindungszeichenfolge hinzugefügt.

24
Oleksii Aza

Sie führen einen Komponententest durch, und im Komponententest sollte Ihre Konzentration die bestimmte Methode sein, die zu testen versucht, und sollten überflüssige Abhängigkeiten beseitigen. In diesem Fall versuchen Sie es mit Mocking/Moleing (verwenden Sie Microsoft Mole und Pex). system.configuration class; das wird sicher eine lösung geben.

Was ich sage, wenn Sie MS moles-and-pex installiert haben -> in Ihrer Testprojektlösung -> klicken Sie mit der rechten Maustaste auf die Systembaugruppe und wählen Sie "Maulwurf erstellen".

Dadurch erhalten Sie eine mole'ed-Version der Konfigurationsklasse, die wiederum eine verspottete Version von configuration class enthält - mit der Sie das Problem umgehen können, mit dem Sie konfrontiert sind.

2
Rahul

Sie können auch spezielle Konfigurationspfade für die ExeConfigurationFileMap verwenden:

// Get the machine.config file.
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
// You may want to map to your own exe.config file here.
fileMap.ExeConfigFilename = @"C:\test\ConfigurationManager.exe.config";
// You can add here LocalUserConfigFilename, MachineConfigFilename and RoamingUserConfigFilename, too
System.Configuration.Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
1
habakuk

Dies hängt mit dem Parameter/noisolation in der Befehlszeile von mstest.exe zusammen. Wenn Sie den Parameter/noisolation weglassen, funktioniert es.

0
Daniele Levis