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