Maison > développement back-end > C++ > Comment puis-je tester efficacement les méthodes privées en C# lorsque je suis confronté à des divergences de type ?

Comment puis-je tester efficacement les méthodes privées en C# lorsque je suis confronté à des divergences de type ?

Mary-Kate Olsen
Libérer: 2025-01-18 21:47:10
original
194 Les gens l'ont consulté

How Can I Effectively Test Private Methods in C# When Facing Type Discrepancies?

Test de méthode privée C#

Pour obtenir une couverture complète du code, les méthodes privées doivent être testées. Une solution consiste à utiliser les classes d'accesseurs générées par Visual Studio. Cependant, cette approche peut rencontrer des erreurs d’exécution en raison d’une incompatibilité de type.

Considérez l'extrait de code suivant :

<code class="language-csharp">// 在MyProj项目中
class TypeA
{
    private List<TypeB> myList = new List<TypeB>();

    private class TypeB
    {
        public TypeB()
        {
        }
    }

    public TypeA()
    {
    }

    private void MyFunc()
    {
        // 更改实例状态的myList处理
    }
}</code>
Copier après la connexion

Question :

Le test unitaire de la méthode privée MyFunc échoue au moment de l'exécution avec l'erreur suivante :

<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

Cela est dû au fait que la classe accesseur génère différentes implémentations de myList avec différents paramètres de type.

Solution :

Dans les versions de .NET Core antérieures à 2.0, vous pouvez utiliser la classe PrivateObject pour appeler des méthodes privées :

<code class="language-csharp">// 在TestMyProj项目中
public void MyFuncTest()
{
    TypeA target = new TypeA();
    PrivateObject obj = new PrivateObject(target);
    // 下一行不会抛出异常
    obj.Invoke("myList", new object[] { new TypeA_Accessor.TypeB() });
    obj.Invoke("MyFunc");

    // 检查target的更改状态
}</code>
Copier après la connexion

Cependant, .NET Core 2.0 et versions ultérieures ont supprimé la prise en charge de PrivateObject et PrivateType. Dans ce cas, envisagez de refactoriser le code pour rendre les méthodes privées testables, ou adoptez une approche basée sur la réflexion.

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