2017-02-25 1 views
0

ich ein Tier-Architektur-Programm mache - asp - dieWie wird der Unit-Testfall für die C# -Bibliothek aufgerufen?

BAL hat - Business-Zugriffslogik Bibliothek,
DAL - Datenzugriffslogik - Bibliothek,
Einstellungen - eine Bibliothek,
und die Hauptanwendung - ausführbar .net Webformular.

Jetzt habe ich einen Unit-Test-Fall geschrieben, um die Einstellungsbibliothek zu testen - diese Bibliothek liest nur die Verbindungszeichenfolge aus der Hauptanwendung web.config.

Wenn ich Testfall aufrufen, wird die Verbindungszeichenfolge nicht gelesen. Was mache ich hier falsch?

web.config aus der ausführbaren Projekt -

<connectionStrings> 
    <!-- DataSource is SQLEXPRESS and Catalog is DBNAME--> 
    <add name="SqlCon" connectionString="Data Source=SHREYAS-PC\SQLEXPRESS;Initial Catalog=SchoolManagementDb;Integrated Security=true"/> 
</connectionStrings> 

Einstellungen Bibliothek -

namespace Settings 
{ 
    public class Settings 
    { 
     public static string ConnectionString() 
     { 
      try 
      { 
       string Con = ConfigurationManager.ConnectionStrings["SqlCon"].ToString(); 
       return Con; 

      } 
      catch(Exception ex) 
      { 
       throw; 
      } 
     } 
    } 
} 

Das Gerät Testfall -

[TestClass] 
public class UnitTestSettings 
{ 
    [TestMethod] 
    public void TestMethod1() 
    { 
     string con = Settings.Settings.ConnectionString(); 
     Console.WriteLine(con); 
    } 
} 

Leider, wenn ich die leite Unit-Test-Fall, die ConnectionString-Rückgabe ist NULL, während, wenn ich die gesamte Anwendung ausführen, bekomme ich die Ergebnisse Ich wünsche mir. Fehle ich hier irgendein Konzept?

Antwort

1

Ihre Verbindungszeichenfolge befindet sich im Webprojekt, nicht in Ihrem Testprojekt.

Fügen Sie Ihrem Testprojekt app.config eine Verbindungszeichenfolge/App-Einstellung hinzu, um zu testen, ob Sie es richtig lesen können.

+0

dann wie kann ich das testen? –

+0

Oder Sie können Ihren Einstellungsleser überladen, damit Sie einen Verweis auf ein externes Konfigurations- oder Einstellungsobjekt übergeben können. –

+1

Die Funktionalität Ihrer Settings-Klasse besteht darin, Konfigurationswerte aus der Konfigurationsdatei zu lesen. Und Ihre Komponententests überprüfen diese Funktionalität. Mit Komponententest können Sie die Einstellungen von web.config nicht lesen. Sie müssen also im Testprojekt app.config hinzufügen und die Verbindungszeichenfolge dort platzieren. Wenn Sie den Komponententest ausführen, sollte er in der Lage sein, den Wert aus der app.config des Testprojekts zu lesen. So testen Sie es. –

1

Die Konfiguration wird aus der Datei .config der Startanwendung oder der Site gelesen, die im Fall des Komponententests app.config des Testprojekts ist. Verschieben Sie die Verbindungszeichenfolge dorthin.

Das neben dem Testfall sollte auch aktualisiert werden.

[TestClass] 
public class UnitTestSettings { 
    [TestMethod] 
    public void TestMethod1() { 
     //Arrange 
     var expected = "Place expected connection string here" 
     //Act 
     var actual = Settings.Settings.ConnectionString(); 
     //Assert 
     Assert.IsNotNull(actual); 
     Assert.AreEqual(expected, actual); 
    } 
} 

Neben dem oben würde ich Refactoring die Architektur vorschlagen Abstraktion zu verwenden und Kopplung an statische Klassen/Mitgliedern zu vermeiden, die Prüfung erschweren. Sie haben bereits das Single-Responsibility-Prinzip eingeführt, was gut ist. Sie sollten Angehörige dazu bringen, sich eher auf eine Abstraktion als auf Umsetzungsfragen zu verlassen.

Zum Beispiel abstrakt die Einstellungen (Service)

public interface ISettings { 
    string ConnectionString { get; } 
} 

Hier ist die Umsetzung.

public class Settings : ISettings { 
    public string ConnectionString { 
     get { 
      try { 
       var value = ConfigurationManager.ConnectionStrings["SqlCon"].ToString(); 
       return value; 
      } catch(Exception ex) { 
       throw; 
      } 
     } 
    } 
} 
+0

Dies ist die richtige Antwort.Die einzige Sache, die hinzugefügt werden muss, ist, dass Sie vielleicht in MS Fakes (wenn Sie VS Unternehmen haben) schauen möchten, in welchem ​​Fall Sie die lästige .config Datei zusammen überspringen können. – zaitsman

Verwandte Themen