Tous invocation sur la maquette doit avoir un programme d'installation correspondante
J'ai un code existant, je veux de l'unité de test. J'ai créé un premier moq test, mais je suis l'exception suivante:
Moq.MockException:IConnection.SendRequest(CAD.De messagerie.Contrat.Serveur de configuration.GetDataVersionRequest)
invocation a échoué avec des simulations de comportement Strictes. Toutes les invocations sur le
maquette doit avoir un programme d'installation correspondante.
Important des morceaux de code:
Propriété de la classe:
Public Property Connection() As IConnection
Get
Return _connection
End Get
Set(ByVal value As IConnection)
_connection = value
End Set
End Property
La méthode qui doit être testé: (_connection) est en fait une classe qui crée une socket tcp et je veux, à se moquer de ces biens pour le SendRequest renvoie ce que je veux.
Public Function GetVersion(ByVal appID As Contract.ApplicationID) As Contract.DataVersion
EnsureConnected()
Dim req As GetDataVersionRequest = New GetDataVersionRequest(appID)
Dim reply As CentralServiceReply = _connection.SendRequest(req) //code I want to mock
Utils.Check.Ensure(TypeOf reply Is GetDataVersionReply, String.Format("Unexpected type: {0}, expected GetDataVersionReply!", reply.GetType()))
Dim version As Contract.DataVersion = CType(reply, GetDataVersionReply).Version
version.UpgradeOwners()
If (Not version.IsSupported) Then
Return Contract.DataVersion.UNSUPPORTED
End If
Return version
End Function
Méthode D'Essai:
[TestMethod]
public void TestMethod2()
{
Contract.CentralServiceRequest req = new Contract.ConfigServer.GetDataVersionRequest(new ApplicationID("AMS", "QA"));
DataVersion v = new DataVersion();
v.AppVersion = "16";
CentralServiceReply reply = new GetDataVersionReply(v);
var ConnectionMock = new Mock<IConnection>(MockBehavior.Strict);
ConnectionMock.Setup(f => f.SendRequest(req)).Returns(reply);
var proxy = new ConfigServerProxy(new ApplicationID("AMS", "QA"), "ws23545", 8001);
proxy.Connection = ConnectionMock.Object; //assign mock object
DataVersion v2 = proxy.GetVersion(new ApplicationID("AMS", "QA"));
Assert.AreEqual(v.AppVersion, v2.AppVersion);
}
Quand je debug de l'unité de test je vois que lors de la procuration.GetVersion est exécutée sur la ligne _connection.SendRequest nous obtenons l'erreur. Aussi, quand j'ai regarder la variable (_connection) dans la fenêtre watch je vois c'est le moq de l'objet. Je suppose donc que l'affectation de propriété s'est bien passé.
Quelqu'un de voir où je suis allé mal?
OriginalL'auteur msjonathan | 2012-08-16
Vous devez vous connecter pour publier un commentaire.
Je suppose que le problème est dans la chose suivante:
Proxy fait l'appel pour obtenir la version de l'application, mais ne pas utiliser ce même objet de demande (il a sans doute créé un autre avec les mêmes paramètres). Depuis qu'il est différent des objets et de la maquette est mis en place pour attendre la même chose, il échoue.
Solution raisonnable serait de s'attendre à ce tout demande de type CentralServiceRequest. Je ne suis pas très versé dans Moq, mais je suppose que c'est quelque chose comme ceci:
Espère que cette aide.
Arrive tout le temps 🙂
Les retours doivent rendre la chose que vous souhaitez retourner (Retours(réponse)). Il y a aussi des façons plus sophistiquées de manipulation reçu des variables (comme la demande doit avoir une certaine propriété définie comme quelque chose). Découvrez une partie de la documentation/tutoriels pour voir ce qui peut être fait.
Hej, Dimitry, merci pour les responsables, il fonctionne comme un charme.
Vous êtes les bienvenus 🙂
OriginalL'auteur Dmitry Reznik