Question

J'utilise Moq pour les tests unitaires. Pour que Moq fonctionne, les propriétés et les méthodes doivent être marquées comme virtuelles. Parfois, je passe des données et définit des valeurs de propriétés dans les constructeurs. N'y a-t-il pas une règle selon laquelle vous ne devez pas définir de propriétés virtuelles dans constrcutors, car cela pourrait entraîner un comportement inattendu (si la classe a été héritée d'une classe de base) ou est-il prudent de le faire?

Était-ce utile?

La solution

C’est effectivement un problème et Visual Studio Code L'analyse le vérifie explicitement .

Une solution de contournement simple consiste à déplacer le travail vers un membre interne non virtuel, puis à appeler la méthode virtuelle ainsi que le constructeur. Quelque chose comme ça:

public class MyClass
{
    public MyClass()
    {
        this.DoStuffInternal();
    }

    public virtual void DoStuff()
    {
        this.DoStuffInternal();
    }

    internal void DoStuffInternal()
    {
        // Interesting stuff happens here
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top