¿Es posible simular un método estático usando Rhino.Mocks? Si Rhino no es compatible con esto, ¿hay algún patrón o algo que me permita lograr lo mismo?Mocking Métodos estáticos usando Rhino.Mocks
Respuesta
¿Es posible burlarse de un método estático usando Rhino.Mocks
No, no es posible.
TypeMock puede hacerlo porque utiliza el perfilador CLR para interceptar y redirigir llamadas.
RhinoMocks, NMock y Moq no pueden hacer esto porque estas bibliotecas son más simples; no usan las API CLR Profiler. Son más simples en el sentido de que usan proxies para interceptar miembros virtuales y llamadas de interfaz. La desventaja de esta simplicidad es que no pueden simular ciertas cosas, como métodos estáticos, propiedades estáticas, clases selladas o métodos de instancia no virtuales.
Envuelva la llamada al método estático en un método de instancia virtual en otra clase, luego protéjalo.
El único marco simulado que conozco que admite señales estáticas de burla es TypeMock.
Como Rytmis sugirió, debe envolver los estáticos en algo (es decir, una clase de instancia con métodos virtuales o una interfaz) que luego puede simular.
He estado burlando usando moq, no creo que podamos simular miembros estáticos al usar esto porque moQ crea un nuevo proxy para el objetivo (clase o interfaz). Entonces solo se pueden burlar los miembros heredables (virtuales en caso de clase, públicos en términos de interfaz). Claramente, los miembros estáticos no son heredados, de ahí el problema.
Este es el mayor inconveniente de Rhino Mocks. No sé si es posible que Rhino Mocks lo implemente sin un nuevo concepto de cómo hace su burla.
Si no puede usar TypeMock para interceptar la llamada al método, el patrón recomendado para usar es crear un proxy que reenvía a los métodos no virtuales o estáticos que le interesan probar, luego configure la expectativa en el proxy . Para ilustrar, considere las siguientes clases.
class TypeToTest
{
public void Method() { }
}
interface ITypeToTest
{
void Method();
}
class TypeToTestProxy : ITypeToTest
{
TypeToTest m_type = new TypeToTest();
public void Method() { m_type.Method(); }
}
Mediante la creación de este proxy, ahora se puede utilizar un ITypeToTest
en el lugar de donde estaban pasando o la creación de una instancia TypeToTest
, asegurándose de que la aplicación por defecto utiliza el TypeToTestProxy
ya que reenvía a la aplicación real. Luego, puede crear una simulación ITypeToTest
en su código de prueba y establecer expectativas en consecuencia.
Tenga en cuenta que la creación de estos proxies puede ser muy tediosa, propensa a errores y lleva mucho tiempo. Para solucionar esto, mantengo una biblioteca y un conjunto de herramientas que generan ensamblajes que contienen estos tipos por usted. Consulte this page para obtener más información.
Creo que tanto la clase de proxy TypeToTest como esta interfaz ITypeToTest deben ser públicas para Rhino Mocks –
- 1. ¿Mocking métodos públicos no estáticos en clases abstractas con JMockit?
- 2. Mocking COM Interfaces usando Rhino Mocks
- 3. Mocking Static Methods
- 4. Mocking métodos no virtuales en C#
- 5. Inicializadores estáticos y métodos estáticos En Java
- 6. Herencia en métodos estáticos
- 7. Métodos estáticos en Java
- 8. php métodos estáticos pregunta
- 9. PHP llegar métodos estáticos
- 10. Métodos estáticos en PHP
- 11. ¿Métodos en línea estáticos?
- 12. Métodos estáticos en ASP.NET
- 13. F # Métodos estáticos privados
- 14. Mocking Static Methods
- 15. Cómo usar Rhino.Mocks AssertWasCalled() correctamente?
- 16. Controladores ASP.NET MVC métodos estáticos
- 17. Métodos estáticos públicos vs métodos públicos
- 18. Métodos estáticos falsos de múltiples clases usando PowerMock
- 19. ¿Usando métodos estáticos o ninguno estático en Dao Class?
- 20. ¿Cuándo debería escribir métodos estáticos?
- 21. métodos estáticos C++ Singleton Vs
- 22. métodos abstractos estáticos en C++
- 23. ¿Cómo burlarse con métodos estáticos?
- 24. métodos estáticos y pruebas unitarias
- 25. Funciones frente a métodos estáticos
- 26. Los métodos estáticos en C++
- 27. Uso de métodos estáticos privados
- 28. ¿Métodos estáticos en módulos ruby?
- 29. Métodos estáticos en clases genéricas?
- 30. métodos estáticos abstractas en Scala
mejor solución para mí, pero tarde o temprano el código se impulsa debido a esta fasades. –