J'ai la classe ci-dessous et j'essaie de tester la méthode AddRecordToQueue.
J'utilise Moq pour simuler le résultat de la méthode AddToQueue dans la méthode AddRecordToQueue.
La méthode AddToQueue renvoie un booléen, donc j'essaie de se moquer du résultat avec une vraie valeur
public class Test
{
private readonly IRabbitMqConnection rabbitMqConnection;
public Test(IRabbitMqConnection rabbitMqConnection)
{
this.rabbitMqConnection = rabbitMqConnection;
}
public bool AddRecordToQueue(string messageExchange, object data)
{
var jsonified = JsonConvert.SerializeObject(data);
var customerBuffer = Encoding.UTF8.GetBytes(jsonified);
var result = this.rabbitMqConnection.AddToQueue(customerBuffer, messageExchange);
return result;
}
}
Ma classe de test ressemble à ce qui suit.
[TestClass]
public class TestCon
{
[TestMethod]
public void MockTest()
{
Moq.Mock<IRabbitMqConnection> rabbitConection = new Moq.Mock<IRabbitMqConnection>();
var draftContactsManager = new Test(rabbitConection.Object);
rabbitConection.Setup(e => e.AddToQueue(null, string.Empty)).Returns((bool res) => true);
var result = draftContactsManager.AddRecordToQueue("someExchange", null);
Assert.IsTrue(result);
}
}
Je n'arrive pas à définir le résultat moq comme vrai. Quelqu'un peut-il me dire ce qui me manque
merci
Je pense que vous devez changer le Returns
pour retourner juste vrai au lieu du lambda. Comme ça:
rabbitConection.Setup(e => e.AddToQueue(null, string.Empty)).Returns(true)
ÉDITER:
Si cela ne fonctionne toujours pas, cela est probablement dû au fait que les paramètres ne correspondent pas. Vous passez par "someExchange"
mais la maquette est configurée pour la chaîne. Vide. Si vous n'êtes pas sûr des valeurs qui seront utilisées, vous pouvez utiliser le It.IsAny
méthode pour contourner ce problème.
rabbitConection.Setup(e => e.AddToQueue(It.IsAny<byte[]>(), It.IsAny<string>())).Returns(true)
Vous devez configurer la méthode avec les arguments réels qu'elle a invoqués. Si JsonConvert.SerializeObject(data)
renvoie null, alors voici la configuration:
rabbitConection.Setup(e => e.AddToQueue(null, "someExchange")).Returns(true)
En outre, vous pouvez configurer la méthode pour renvoyer true/false indépendamment des valeurs des arguments:
rabbitConection.Setup(e => e.AddToQueue(It.IsAny<byte[]>(), It.IsAny<string>())).Returns(true)
Avec la configuration ci-dessus, la méthode renverra true
peu importe ce que vous avez transmis à la méthode. L'exemple précédent ne renvoie true que lorsque la méthode est appelée avec les arguments configurés.
Setup
avant en utilisant le Object
associéCela devrait ressembler à:
...
rabbitConection
.Setup(e => e.AddToQueue(It.IsAny<byte[]>(), It.IsAny<string>()))
.Returns(true);
var draftContactsManager = new Test(rabbitConection.Object);
...