簡體   English   中英

如何對此進行單元測試

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

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