簡體   English   中英

如何調用C#庫的單元測試用例?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM