[英]How to call unit test case for the C# library?
我正在制作一個層級架構程序-
BAL-業務訪問邏輯庫,
DAL-數據訪問邏輯-庫
設置-庫,
和主應用程序-可執行文件-asp.net網絡表單。
現在,我編寫了一個單元測試用例來測試設置庫-該庫什么都不做,只是從主應用程序web.config
讀取連接字符串。
當我調用測試用例時,不會讀取連接字符串。 我在這里做錯了。
可執行項目中的web.config-
<connectionStrings>
<!-- DataSource is SQLEXPRESS and Catalog is DBNAME-->
<add name="SqlCon" connectionString="Data Source=SHREYAS-PC\SQLEXPRESS;Initial Catalog=SchoolManagementDb;Integrated Security=true"/>
</connectionStrings>
設置庫-
namespace Settings
{
public class Settings
{
public static string ConnectionString()
{
try
{
string Con = ConfigurationManager.ConnectionStrings["SqlCon"].ToString();
return Con;
}
catch(Exception ex)
{
throw;
}
}
}
}
單元測試用例-
[TestClass]
public class UnitTestSettings
{
[TestMethod]
public void TestMethod1()
{
string con = Settings.Settings.ConnectionString();
Console.WriteLine(con);
}
}
不幸的是,當我運行單元測試用例時,connectionString返回為NULL,而如果我運行整個應用程序,則會得到我想要的結果。 我在這里錯過任何概念嗎?
您的連接字符串在Web項目中,而不是測試項目中。
將連接字符串/應用程序設置添加到測試項目app.config中,以測試您可以正確讀取它。
從啟動應用程序或站點的.config
文件中讀取配置,對於單元測試,該文件是測試項目的app.config
。 將連接字符串移到那里。
除了測試用例,還應該更新。
[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);
}
}
除了上述內容外,我建議重構架構以使用抽象,並避免耦合到使測試變得困難的靜態類/成員。 您已經遵循單一責任原則,這很好。 您應該使依賴項依賴於抽象而不是實現問題。
例如,抽象設置(服務)
public interface ISettings {
string ConnectionString { get; }
}
這是實現。
public class Settings : ISettings {
public string ConnectionString {
get {
try {
var value = ConfigurationManager.ConnectionStrings["SqlCon"].ToString();
return value;
} catch(Exception ex) {
throw;
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.