Les appels de Test pour les méthodes privées moq
J'ai la méthode suivante j'ai besoin de tester le Moq. Le problème est que chaque méthode appelée dans l'instruction switch est privé, y compris les PublishMessage à la fin. Mais cette méthode (ProcessMessage) est public. Comment puis-je tester ce que je puisse assurer les appels sont effectués en fonction du paramètre? Notez que je ne suis pas tester les méthodes privées, je veux juste tester les "appels". Je voudrais, à se moquer de ces méthodes privées et vérifier si elles sont appelées à l'aide de l'Installation, mais Moq ne supporte pas les moqueries des méthodes privées.
public void ProcessMessage(DispenserMessageDataContract dispenserMessage)
{
var transOptions = new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted };
using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew, transOptions))
{
switch (dispenserMessage.Type)
{
case DispenserMessageType.AckNack:
UpdateAckNackMessageQueue(dispenserMessage);
break;
case DispenserMessageType.FillRequest:
CreateFillRequestMessageQueue(dispenserMessage);
break;
case DispenserMessageType.FillEvent:
UpdateFillEventMessageQueue(dispenserMessage);
break;
case DispenserMessageType.RequestInventory:
CreateRequestInventoryMessageQueue(dispenserMessage);
break;
case DispenserMessageType.ReceiveInventory:
CreateReceiveInventoryMessageQueue(dispenserMessage);
break;
}
scope.Complete();
}
PublishMessage(dispenserMessage);
}
OriginalL'auteur Ray | 2014-01-08
Vous devez vous connecter pour publier un commentaire.
Vous aurez à changer les méthodes pour atleast virtuelles protégées à se moquer d'eux et ensuite utiliser la maquette.Protégé pour se moquer d'eux(http://blogs.clariusconsulting.net/kzu/mocking-protected-members-with-moq/). Vous ne pouvez pas se moquer des méthodes privées.
Moq (et quelques autres cadres) utilise Château du Projet DynamicProxy pour générer des procurations à la volée au moment de l'exécution, de sorte que les membres d'un objet peut être intercepté, sans modifier le code de la classe. Que l'interception ne peut être fait sur public virtuel et de méthodes virtuelles protégées.
Voir URL ci-dessous pour plus d'informations:
http://www.castleproject.org/projects/dynamicproxy/
Moq est de ne pas forcer la déviation à partir des meilleures pratiques, ce qui est réellement divergentes, c'est le fait que vous souhaitez tester les méthodes privées de façon indépendante. Idéalement, un test ne savent même pas que les méthodes privées. Au lieu de cela vous de tester l'ensemble de l'interaction provoquée par la méthode publique vous appeler directement et de toutes les choses qu'il appelle par la suite, c'est à dire ce que l'appelant se voit et pas les détails de mise en œuvre.
OriginalL'auteur Adarsh Shah
Vous pourrez extraire la méthode privée dans une autre classe et à les rendre publics, puis se moquer de ceux Moq et de vérifier qu'ils ont été appelés.
OriginalL'auteur Olivier
Moq est de se moquer des propriétés et des méthodes déclarées dans les interfaces et ou le résumé des propriétés et des méthodes dans les classes.
L'idée derrière Moq-test est de tester les interactions entre la classe sous test et le reste du monde (et ses dépendances). Moq le fait en créant un "moqué" de la mise en œuvre de l'interface ou d'un dérivé de la classe abstraite avec les méthodes abstraites de mise en œuvre.
Moq ne peut pas remplacer de mise en œuvre existantes comme vos méthodes privées. Ce n'est pas la façon dont Moq œuvres.
Soit vous devez tester "ProcessMessage" avec tous les possibles d'entrée et de sortie attendue ou vous devriez refactoriser votre classe de déléguer les appels à des méthodes d'interface que vous pouvez vous moquer de Moq. Essais de méthodes privées est un mauvais concept, de toute façon. Ils sont confidentiels, pour une raison, qui est à masquer la mise en œuvre de ce qu'il peut changer à volonté.
OriginalL'auteur Holstebroe
Je préfère ajouter d'autres classe (*Helper) et de passer tous mes méthodes privées au public. Ensuite, vous pouvez facilement tester vos méthodes directement. Je n'ai pas trouver de moyen plus élégant de le faire.
OriginalL'auteur Ivan Zavalnîi