[英]How to unit test this
我正在嘗試為我的服務層之一編寫第一個單元測試。 我正在使用nunit和moq(最新版本)。
我有一個倉庫,但我會嘲笑那沒問題。
public void Create(string email, int id)
{
User user = Repo.GetUserByEmail(email); // mock this out. and return a mocked user.
if user != null)
{
// check permission
var clearence = GetPermissions(user, PermissionTypes.Add, id);
// some other stuff
}
}
private static List<Permissions> GetPermissions(User user, PermissionTypes PermissionNeeded, int id)
{
List<PermissionLevel> clearence = user.PermissionLevels.Where(u => u.id == id &&
(u.Permission.Name == PermissionNeeded || u.Permission.Name == PermissionTypes.Owner)).ToList();
return clearence;
}
這就是我所擁有的。
現在讓我知道的是這個間隙。 我不確定該怎么做。 我不確定是否必須使用戶對象具有包含ID的permissionLevels。
我不確定是否可以模擬它,但由於它是私有的,因此我對此表示懷疑。
第二個問題是我不確定如何創建“ id”,因為“ id”位於具有私有集的域類中,因為這是nhibernate的標准。
所以我不確定該如何解決。
是的,假設您在模擬GetUserByEmail,則可以讓它返回包含一組權限示例的用戶。
我將Repo.GetUserByEmail方法包裝在單獨的類中,並將其注入您的類中。 像這樣:
public class YourClass
{
private readonly UserProvider _userProvider;
public TestedClass(UserProvider userProvider)
{
_userProvider = userProvider;
}
public void Create(string email, int id)
{
User user = _userProvider.GetUser(email, PermissionTypes.Add, id); // mock this out. and return a mocked user.
if (user != null)
{
// check permission
var clearence = GetPermissions(user, PermissionTypes.Add, id);
// some other stuff
}
}
}
public class UserProvider
{
public User GetUser(string email, PermissionTypes.Add, id)
{
return Repo.GetUserByEmail(email);
}
}
因此,您可以對UserProvider類進行存根,並始終在測試中完全控制用戶。
記得也要測試UserProvider類; o)
問候,莫滕
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.