Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

252
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!