Pregunta

Estoy usando Moq para pruebas unitarias. Para que Moq funcione, las propiedades y los métodos deben marcarse como virtuales. A veces paso datos y establezco valores de propiedad en los constructores. ¿No existe una regla que establezca que no debe establecer propiedades virtuales en los constructores ya que puede causar un comportamiento inesperado (si la clase se ha heredado de una clase base) o es seguro hacerlo?

¿Fue útil?

Solución

Es, de hecho, un problema, y ??Visual Studio Código El análisis verifica explícitamente esto .

Una solución simple para esto es mover el trabajo a un miembro interno no virtual, y luego hacer que el método virtual llame a eso, así como al constructor. Algo como esto:

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

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

    internal void DoStuffInternal()
    {
        // Interesting stuff happens here
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top