2017-06-02 8 views
0

ユニットテストプロジェクトを使用してユーザー登録メソッドテストを作成します。私はテストケースをファイル実行したとき、それは****クラスのデフォルトコンストラクタを取得できませんUnitTestingのMockフレームワークでNULL値が返される

言い、上記のコードで

[TestClass] 
public class PersonRegistration 
    { 
    private ILoggingService _loggingService; 
    private IUserManager _userManager; 
    public PersonRegistration(IUserManager userManager, ILoggingService 
    loggingService) 
    { 
     this._userManager = userManager; 
     this._loggingService = loggingService; 
    } 

    [TestMethod] 
    public void TestMethod1() 
    { 
     RegisterBindingModel model = new RegisterBindingModel(); 
     AccountController ac = new AccountController(_userManager, _loggingService); 
     model.UserName = "[email protected]"; 
     var result = ac.Register(model); 
     Assert.AreEqual("User Registered Successfully", result); 
    } 

下のコードを参照してください。Test.Controllers.PersonRegistraion

この問題を解決するために、パラメータなしでデフォルトのコンストラクタを追加しました。最初の問題が解決しました。しかし、_userManager_loggingServiceはNULLになります。画像1

Image 1

それは、null参照の例外がスローされます(画像2)

Image 2

は、だから私は部品番号( Using Moq)を使用し、下記のようなインターフェースを埋めるために参照してください。

[TestClass] 
public class PersonRegistration 
    { 
    [TestMethod] 
    public void TestMethod1() 
    { 
     var mockService = new Mock<ILoggingService>(); 
     var mockManager = new Mock<IUserManager>(); 
     RegisterBindingModel model = new RegisterBindingModel(); 
     AccountController ac = new AccountController(mockManager.Object, mockService.Object); 
     model.UserName = "[email protected]"; 
     var result = ac.Register(model); 
     Assert.AreEqual("User Registered Successfully", result); 
    } 
} 

Image 3

今すぐコードがRegister()まで横断し、しかし、それはNULLとして結果を返します。 Mockオブジェクトが無効なためですか?私はWebApiプロジェクト内でプロセス全体を適切に実行できます。しかし、Unit Testプロジェクトでも同じシナリオがnullを返します。

インタフェースIUserManager

public interface IUserManager : IDisposable 
{ 
Task<string> Register(RegisterBindingModel model); 
} 

答えて

1

まず第一に、あなたは別のユニットテストクラスのテストケースを書くべきです。 VSは、パブリックコンストラクタを持たないPersonRegistrationクラスに属するユニットテストメソッドを実行できなかったため、最初のエラーがスローされました。

あなたは正しい道を模索しています。この問題は無効なモックオブジェクトによるものではありません。あなたがすべきことは、以下のように機能を模擬することです:

mockManager.Setup(it => it.Register(It.IsAny<RegisterBindingModel>())) 
      .Returns(Task.FromResult(string.Empty)); 
+0

ありがとうございます。私は別のテストクラスの中にいます。そして、あなたが与えた上記コードをどこに置くことができますか? –

+0

あなたのテストメソッドの次の文の直後に:var mockManager = new Mock (); – ashin

+0

'が返されました(新しい結果());' 'Result()'が見つかりませんでした。 –

関連する問題