Maison > développement back-end > C++ > Comment puis-je tester unitairement des méthodes privées en C# et éviter les erreurs d'exécution ?

Comment puis-je tester unitairement des méthodes privées en C# et éviter les erreurs d'exécution ?

Barbara Streisand
Libérer: 2025-01-18 21:51:09
original
402 Les gens l'ont consulté

How Can I Unit Test Private Methods in C# and Avoid Runtime Errors?

Méthodes privées de tests unitaires C# : éviter les erreurs d'exécution

En C#, vous pouvez utiliser les classes d'accesseurs générées automatiquement par Visual Studio pour tester unitairement les méthodes privées. Cependant, des erreurs d'exécution peuvent survenir lorsque vous essayez de manipuler l'état interne de l'objet via ces tests.

Problème fondamental

L'erreur rencontrée dans le code fourni est due au fait que la cible de la classe d'accesseur est traitée comme TypeA_Accessor au moment de la compilation, mais traitée comme TypeA au moment de l'exécution. Cette incompatibilité entraîne l'échec de l'opération Add() sur target.myList car les types de liste sont différents.

Résolution des erreurs

Dans les versions antérieures à .NET Core 2.0, vous pouvez utiliser la classe PrivateObject pour accéder aux méthodes privées. Cela nécessite les étapes suivantes :

<code class="language-csharp">Class target = new Class();
PrivateObject obj = new PrivateObject(target);
var retVal = obj.Invoke("PrivateMethod");
Assert.AreEqual(expectedVal, retVal);</code>
Copier après la connexion

Méthodes alternatives

Au lieu de tester directement les méthodes privées, envisagez l'alternative suivante :

  • Test d'une méthode publique qui appelle une méthode privée : En testant le comportement d'une méthode publique, vous pouvez vérifier indirectement la fonctionnalité de la méthode interne.
  • Refactoriser pour supprimer les méthodes privées : Si possible, extrayez les méthodes privées dans une nouvelle classe publique ou protégée afin qu'elles puissent être testées directement.
  • Utiliser l'injection de dépendances : Créez des abstractions pour les composants internes et injectez-les dans la classe testée pour faciliter le remplacement des tests.

Veuillez noter que la prise en charge de PrivateObject et PrivateType a été supprimée dans .NET Core 2.0 et versions ultérieures, ce qui nécessite des méthodes alternatives pour accéder et tester les méthodes privées dans les versions plus récentes du framework.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal