2016-07-26 117 views
1

我是新来的Moq框架,我有一个测试方法的书写,但我得到下面的错误。我找不到我错过的地方。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

您创建了一个Mock<IResponseMessage>,默认情况下它

MockBehavior.Strict使用MockBehavior.Strict:使模拟将始终抛出调用一个异常 没有相应的设置。

在代码中的某处,您正在调用没有设置配置的成员。我建议在你的测试

对于方法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

相关问题