Maison > développement back-end > C++ > Comment puis-je tester efficacement les méthodes privées en C# tout en évitant les erreurs d'exécution ?

Comment puis-je tester efficacement les méthodes privées en C# tout en évitant les erreurs d'exécution ?

Susan Sarandon
Libérer: 2025-01-18 21:38:10
original
281 Les gens l'ont consulté

How Can I Effectively Unit Test Private Methods in C# While Avoiding Runtime Errors?

Défis des tests unitaires de méthodes privées en C#

Les tests unitaires des méthodes privées en C# peuvent être délicats en raison de leur nature encapsulée. Bien que Visual Studio fournisse des classes d'accesseurs générées automatiquement, des erreurs d'exécution peuvent toujours se produire lors des tests.

Exemples de code et cas de test

Considérez l'extrait de code suivant et le test correspondant :

<code class="language-csharp">// 被测试单元
class TypeA
{
    private List<TypeB> myList = new List<TypeB>();
    private void MyFunc() { /* 忽略处理过程 */ }
}

// 单元测试
public void MyFuncTest()
{
    TypeA_Accessor target = new TypeA_Accessor();
    target.myList.Add(new TypeA_Accessor.TypeB());
    target.MyFunc();
}</code>
Copier après la connexion

Erreur d'exécution

Compilation réussie, mais erreur d'exécution due à un problème de conversion de type :

<code>无法将类型为 'System.Collections.Generic.List`1[MyProj.TypeA.TypeA_Accessor+TypeB]' 的对象转换为类型为 'System.Collections.Generic.List`1[MyProj.TypeA.TypeA+TypeB]' 的对象。</code>
Copier après la connexion

La cause fondamentale est que target est du type TypeA_Accessor, pas du TypeA attendu. Cette incompatibilité entraîne l'échec de la conversion.

Solution

Avant .NET Core 2.0

Utilisez la classe PrivateObject pour accéder aux méthodes et champs privés :

<code class="language-csharp">PrivateObject target = new PrivateObject(new TypeA());
var retVal = target.Invoke("MyFunc");</code>
Copier après la connexion

.NET Core 2.0 et supérieur

La classe

PrivateObject n'est plus supportée. L'alternative consiste à définir la méthode privée sur internal à des fins de test, ou à envisager de refactoriser le code pour éviter d'avoir à tester la méthode privée.

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