Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

244
Vistas
¿Puedo usar moq Mock<MyClass> para simular una clase, no una interfaz?

Al pasar por https://github.com/Moq/moq4/wiki/Quickstart , veo que se burla de una interfaz.

Tengo una clase en mi código heredado que no tiene una interfaz. Cuando Mock<MyClass> , obtengo la siguiente excepción:

Información adicional: No se puede instanciar el proxy de la clase: MyCompnay.Mylegacy.MyClass.

¿Cómo puedo usar Moq para simular la clase del código heredado?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Es posible Simular clases concretas

 [TestClass] public class PlaceholderParserFixture { public class Foo { public virtual int GetValue() { return 11; } } public class Bar { private readonly Foo _foo; public Bar(Foo foo) { _foo = foo; } public int GetValue() { return _foo.GetValue(); } } [TestMethod] public void MyTestMethod() { var foo = new Mock<Foo>(); foo.Setup(mk => mk.GetValue()).Returns(16); var bar = new Bar(foo.Object); Assert.AreEqual(16, bar.GetValue()); } }

pero,

  • Debe ser una clase pública.
  • El método a simular debe ser virtual.

Los mensajes que recibí para:

Haciendo la clase interna

Castle.DynamicProxy.Generators.GeneratorException: el tipo MoqFixture+Foo no es público. No se puede crear proxy para tipos que no son accesibles.

o, tener un método no virtual

System.NotSupportedException: configuración no válida en un miembro no virtual (reemplazable en VB): mk => mk.GetValue()

no coincida con su mensaje de cannot instantiate , por lo que algo más parece estar mal.

Si no tiene un constructor predeterminado en el objeto simulado, puede obtener ese mensaje de error

p.ej

 public class Foo { private int _value; public Foo(int value) { _value = value; } public virtual int GetValue() { return _value; } }

uno puede evitar esto pasando valores al Mock<> ctor

p.ej

 var foo = new Mock<Foo>(MockBehavior.Strict, new object[] { 11 });
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda