2011-02-01 6 views
0

私のサービスレイヤの1つに私の最初のユニットテストを書こうとしています。私は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を持つユーザーオブジェクトを作成する必要があるかどうかはわかりません。

私はそれを嘲笑することができるかどうかわかりませんが、プライベートなので疑問です。

2番目の問題は、 "id"として "id"を作成する方法が、nhibernateで使用されている標準であるためプライベートセットを持つドメインクラスに作成されているかどうかわかりません。

だから私はそれを回避する方法がわかりません。

+0

何コードテストしたいですか? 'GetPermissions'や「//その他のもの」? –

+0

dv-Jan de Vaan-私が推測する他のもの。基本的にif文は、権限があるかどうかを確認して、良いものを作成する(私のレポの別のもの)。そうでなければ、検証エラーです。私は最初にこの方法で取得する必要がありますし、カウンターを0より返す必要があります。 – chobo2

答えて

0

はい、GetUserByEmailを偽装していると仮定すると、許可のサンプルセットを含むユーザーを返すことができます。

+0

autofixture + auto moqはこれらのオブジェクトを作成するのに役立ちます。私が言ったように私はそれが個人的なセットであるのでidを作る方法を知らないと言ったように(私が言ったように、自動生成されたIDが設定できないことを確認するためにnhibernateでそれを行う標準的な方法だと思われるので) – chobo2

0

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)

よろしく、 モートンを

関連する問題