o puede la clase implementar una clase abstracta también?Para simular un objeto, ¿tiene que implementar una interfaz o marcarse virtual?
Respuesta
para burlarse de un tipo, debe ser o bien una interfaz (esto también se le llama ser virtuales puras) miembros virtuales (o tienen miembros abstractos también son virtuales).
Según esta definición, puede simular todo lo que es virtual.
Esencialmente, los simulacros dinámicos no hacen nada que no puedan hacer a mano.
Digamos que está programando en contra de una interfaz como este:
public interface IMyInterface
{
string Foo(string s);
}
Se puede crear manualmente una aplicación de la prueba específica de IMyInterface que ignora el parámetro de entrada y devuelve siempre el mismo resultado:
public class MyClass : IMyInterface
{
public string Foo(string s)
{
return "Bar";
}
}
Sin embargo, eso se vuelve repetitivo realmente rápido si desea probar cómo el consumidor responde a los diferentes valores de devolución, por lo que en lugar de codificar su Dobles de prueba a mano, puede ve un marco de forma dinámica crearlos para usted.
Imagine que los simulacros dinámicos realmente escriben código similar a la implementación de MyClass anterior (en realidad no escriben el código, emiten dinámicamente los tipos, pero es una analogía lo suficientemente precisa).
Así es como se podría definir el mismo comportamiento que MyClass con Moq:
var mock = new Mock<IMyInterface>();
mock.Setup(x => x.Foo(It.IsAny<string>())).Returns("Bar");
En ambos casos, el construcor de la clase creada se llamará cuando se crea el objeto. Como una interfaz no tiene constructor, este será normalmente el constructor predeterminado (de MyClass y la clase emitida dinámicamente, respectivamente).
Puede hacer lo mismo con tipos concretos como este:
public class MyBase
{
public virtual string Ploeh()
{
return "Fnaah";
}
}
A mano, que sería capaz de derivar de MyBase y reemplazar el método Ploeh porque es virtual:
public class TestSpecificChild : MyBase
{
public override string Ploeh()
{
return "Ndøh";
}
}
Una biblioteca simulada dinámica puede hacer lo mismo, y lo mismo es cierto para los métodos abstractos.
Sin embargo, no puede escribir código que anule un miembro no virtual o interno, y tampoco se puede simular. Solo pueden hacer lo que puedes hacer a mano.
Advertencia: La descripción anterior es cierta para la mayoría de los simulacros dinámicos con la excepción de TypeMock, que es diferente y ... aterrador.
También hay una biblioteca de burlas más nueva, Microsoft Moles, que hace lo mismo que TypeMock ... se burla de todo, incluidos los métodos no virtuales, sellados y estáticos. –
Se puede utilizar para crear Moq se burla de ambas interfaces y las clases existentes. Hay algunos requisitos en las clases. La clase no puede ser sellada. Además, el método que se burla debe marcarse como virtual. No puede simular métodos estáticos (utilice el patrón del adaptador para simular un método estático).
- 1. Comportamiento para simular una enumeración implementar una interfaz
- 2. ¿Cómo implementar una interfaz explícitamente con un método virtual?
- 3. ¿Tiene una interfaz con muchos métodos virtuales? ¿O tener muchas interfaces con solo 1 método virtual?
- 4. Simular micrófono (micrófono virtual)
- 5. ¿Es un objeto o una interfaz? ¿Debo liberarlo o no?
- 6. Java - Asegúrese de que un objeto implementa una interfaz
- 7. Creación automática de un contenedor para implementar una interfaz
- 8. ¿Cómo puedo serializar un objeto que tiene una interfaz como propiedad?
- 9. Cómo comprobar que el tipo actual (objeto de Tipo) tiene interfaz necesaria (o tipo principal)
- 10. ¿Se puede burlar de un objeto que implementa una interfaz Y una clase abstracta?
- 11. Especifique la clase de una interfaz genérica para simular
- 12. casting un objeto a una interfaz genérica
- 13. ¿Cómo buscar un NSSet o NSArray para un objeto que tiene un valor específico para una propiedad específica?
- 14. Vuelva a implementar una interfaz que otra interfaz ya se hereda
- 15. View.OnClickListener() una función o interfaz
- 16. Ventajas de implementar una interfaz
- 17. Implementar una interfaz pero cambiar un miembro para que sea privado
- 18. ¿Puedo llamar a un método que está dentro de una interfaz sin implementar la interfaz?
- 19. Verificar que un objeto tiene una cierta propiedad
- 20. Serializar un objeto que tiene una clase primaria no serializable
- 21. PHPunit: Cómo simular un método que tiene un parámetro Y un valor devuelto
- 22. Usando LINQ para un objeto que solo tiene GetEnumerator()
- 23. lista de objetos Java que toda implementar una interfaz
- 24. Restringir las clases que pueden implementar una interfaz
- 25. ¿Puedo usar métodos de extensión para implementar una interfaz?
- 26. Cómo implementar una propiedad en una interfaz
- 27. ¿Interfaz Cast para su objeto de implementación concreto o viceversa?
- 28. Cómo implementar un sistema de archivos virtual Python usando shelve
- 29. ¿Se puede forzar a un objeto java a implementar una interfaz en tiempo de ejecución?
- 30. Uso de JMockit para simular implementaciones de interfaz autocableadas
Usted acaba de hacer esencialmente la misma pregunta hace unos días: http://stackoverflow.com/questions/1969497/can-you-mock-an-object-that-implements-an-interface-and-an-abstract -class –