web-dev-qa-db-fra.com

Moq.Mock Exception avec invocation a échoué avec un comportement de simulation strict

Je suis nouveau dans le framework Moq et j'ai écrit une méthode de test mais j'obtiens l'erreur ci-dessous. Je n'ai pas pu trouver où j'avais raté.

Quelqu'un peut-il me faire savoir comment puis-je corriger l'erreur ci-dessous?


Une exception de type "Moq.MockException" s'est produite dans Moq.dll mais n'a pas été gérée dans le code utilisateur

Informations supplémentaires: échec de l'invocation IResponseMessage.ReadContentAsString () avec un comportement de simulation Strict.

Toutes les invocations sur la maquette doivent avoir une configuration correspondante.

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***


}

Mes méthodes de test

Méthode 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();
}

Méthode 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();
}
12
crony

Vous avez créé un Mock<IResponseMessage>, qui utilise MockBehavior.Strict par défaut qui

MockBehavior.Strict: oblige le mock à toujours lever une exception pour les invocations qui n'ont pas de configuration correspondante.

Quelque part dans votre code, vous invoquez des membres sans configuration configurée. Je suggère de créer une configuration pour tous les membres que vous avez l'intention d'invoquer lors de vos tests

Pour les méthodes 1 et 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
11
Nkosi