2 votes

Définir le nom de la variable après l'exécution de la méthode dans le test unitaire

J'ai une méthode void :

this._dispatcher.PushAsync(handler, cmd);

Après l'exécution, j'ai changé la propriété de cmd :

cmd.Result = userId;

Comment puis-je définir la valeur de la propriété après l'exécution de la méthode void dans le test unitaire ?

J'essaie quelque chose comme ça :

_dispatcher = new Mock();
_a = new Mock();
_dispatcher
    .Setup(r => r.PushAsync(_cmdHandler, this._cmd))
    .Callback(() => _a.SetupProperty(y => y.Result == this._response));

Mais cela montre...

(Erreur : l'expression n'est pas un accès à une propriété : y => y.Result == this._response).

SaveUserCmd :

public class SaveUserCmd
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public object Result { get; set; }
}

IDispatcher :

public interface IDispatcher
{
    Task PushAsync(ICommandHandlerAsync commandHandlerAsync, TCommand message);
}

2voto

Nkosi Points 95895

Tout d'abord, vous voulez assigner une valeur dans le rappel. == n'assigne pas une valeur, c'est une comparaison d'égalité.

Deuxièmement, pas besoin de simuler le modèle. Créez simplement une instance et utilisez-la. Vous pouvez toujours y accéder dans le rappel via les paramètres.

Troisièmement, comme la méthode à moquer est asynchrone, vous devez renvoyer une tâche pour que le code puisse s'exécuter jusqu'à la fin.

//Arranger
var dispatcher = new Mock();
var cmd = new SaveUserCmd();
var userId = "valeur ici";
dispatcher.Setup(r => r.PushAsync(_cmdHandler, cmd))
    .Callback((ICommandHandlerAsync h, SaveUserCmd c) => c.Result = userId))
    .Returns(Task.FromResult((object)null));

0voto

poke Points 64398

_a.SetupProperty configurera la propriété du mock _a ce qui n'est pas ce que vous voulez faire (en général, initialiser les mocks plus tard n'est jamais la bonne approche). Au lieu de cela, vous voulez simplement attribuer une valeur à une propriété de l'objet réel.

Vous pouvez facilement le faire en utilisant .Callback() qui dispose également de surcharges vous donnant l'instance exacte qui a été passée à l'appel de méthode mocké :

_dispatcher
    .Setup(r => r.PushAsync(It.IsAny>(), It.IsAny()))
    .Callback((handler, cmd) => {
        cmd.Result = "résultat statique";
    });

Cet appel de méthode de configuration accepte désormais n'importe quels arguments valides et définira simplement le résultat de la commande passée sur un résultat fixe. Ainsi, vous pouvez facilement tester si la chose effectivement testée appelle correctement l'objet dispatcher.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X