2016-07-26 12 views
1

私はMoqフレームワークが初めてで、writternにテストメソッドがありますが、以下のエラーが発生しています。私は逃した場所を見つけることができませんでした。Moq.Mock呼び出しで例外が発生し、模擬動作が厳格になりました。

以下のエラーを修正する方法を教えてください。


型「Moq.MockException」の例外がMoq.dllで発生したが、 ユーザーコード

追加情報で処理されていなかった。IResponseMessage.ReadContentAsString() 呼び出し厳格なモック行動で失敗しました。

モック上のすべての呼び出しには、対応する設定が必要です。

Execp.cs

public Execp(IResponseMessage msg) 
{ 

    this.StatusCode = msg.StatusCode;//*getting exception here while running **method 1*** 
    this.ReadContentAsString = msg.ReadContentAsString();//*getting exception here while running **method 2*** 


} 

マイ試験方法

方法1

[TestMethod()]   
public void TestFail() 
{ 

    int employeeId = 0; 

    DataModel.Employee.Get.Employee employee= new DataModel.Employee.Get.Employee(); 
    string url = string.Format("api/1/somename/{0}", employeeId); 

    restClient 
     .Setup(x => x.Get(url)) 
     .Returns(responseMessage.Object); 

    responseMessage.SetupGet(x => x.IsSuccessStatusCode).Returns(false); 

    var client = new account(clientFactory.Object, serverUri, moqLogged.Object); 
    var result = client.GetEmployee(employeeId); 
    Assert.AreEqual(result, null); 

    client.Dispose(); 
    moqFactory.VerifyAll(); 
} 

方法2

[TestMethod()] 
public void TestBadRequest() 
{ 

    var httpStatusCode = System.Net.HttpStatusCode.BadRequest; 

    string employeeName = "Test Name"; 
    int teamLeaderId= 1; 
    string url = string.Format("api/1/somename/{0}/teammember", teamLeaderId); 
    DataModel.Group.Post.TeamMember employee= new DataModel.Group.Post.teamMember(); 

    UserResponse userResponse = new UserResponse(); 

    restClient 
     .Setup(x => x.PostAsJson(url, It.IsAny<DataModel.Employee.Post.TeamMember>())) 
     .Returns(responseMessage.Object); 

    responseMessage.SetupGet(x => x.IsSuccessStatusCode).Returns(false); 
    responseMessage.SetupGet(x => x.StatusCode).Returns(httpStatusCode); 

    var client = new AcronisAccountManagementClient(clientFactory.Object, serverUri, moqLogged.Object); 

    var result = client.CreateEmployee(employee, teamLeaderId); 
    Assert.AreEqual(result.statusCode, httpStatusCode); 

    client.Dispose(); 
    moqFactory.VerifyAll(); 
} 

答えて

2

あなたはMockBehavior.Strictデフォルトでどの

MockBehavior.Strictを使用していますMock<IResponseMessage>を、作成した:モックは常に、対応するセットアップを持っていない 呼び出しの例外をスローするようにします。

コードのどこかに、設定が構成されていないメンバーが呼び出されています。私はあなたが方法1と2について、あなたのテスト

時に起動しようとするすべてのメンバーのためのセットアップを作成するお勧め:

//...other code removed for brevity 

var httpStatusCode = System.Net.HttpStatusCode.BadRequest;//or what ever you want it to be 
responseMessage.Setup(m => m.StatusCode).Returns(httpStatusCode); 
responseMessage.Setup(m => m.ReadContentAsString()).Returns("Put your return string here"); 

//...other code removed for brevity 
+0

あなたが最高です。ありがとうございました。 – crony

関連する問題