在當前的WPF應用程序中,我們需要在第一次使用時檢索用戶對象,然後在用戶使用該應用程序時只保留該用戶對象。單元測試通過公共屬性存儲庫的靜態類
我們打算用靜態方法做到這一點。
public static class UserHelper
{
public static User CurrentUser { get; set; }
}
但是,用戶數據保存在數據庫中。因此,我們將需要旋轉起來我們的資源庫的副本在這個輔助類做的工作:
public static class UserHelper
{
public static User CurrentUser { get; set; }
private static IRepository _rep = new Repository();
public static void SetUser(string username)
{
CurrentUser = _rep.GetUserByName(username);
}
}
然而,這是不是可以進行單元測試 - 你不能在一個倉庫傳遞給一個靜態類,通過構造函數。因此最簡單的解決辦法似乎是使_rep
公衆(和其重命名爲Rep
) - 這樣你仍然可以把它作爲新Repository()
在類,但在測試的時候,我們可以這樣做:
[TestMethod]
public void Assert_SomethingAboutUsers
{
Mock<IRepository> repMock = new Mock<IRepository>();
repMock.Setup(z => z.GetUserByName(It.IsAny<string>())).Returns(new User());
UserHelper.Rep = repMock.Object;
// make assertions
}
但這對我來說很有趣。我覺得在靜態類中有一個倉庫是有點尷尬的。
這是一個壞主意嗎?如果是這樣,爲什麼?