que tienen una clase como esta:¿Cómo usar Moles para un constructor?
public class Product : IProduct
{
static private string _defaultName = "default";
private string _name;
private float _price;
/// Constructor
public Product()
{
_price = 10.0F;
}
public void ModifyPrice(float modifier)
{
_price = _price * modifier;
}
Quiero ModifyPrice no hacer nada para un valor específico, pero también quiero llamar al constructor que establece el precio a 10. He intentado algo como esto:
var fake = new SProduct() { CallBase = true };
var mole = new MProduct(fake)
{
ModifyPriceSingle = (actual) =>
{
if (actual != 20.0f)
{
MolesContext.ExecuteWithoutMoles(() => fake.ModifyPrice(actual));
}
}
};
MProduct.Constructor = (@this) => (@this) = fake;
Pero incluso si falsa es así inicializado con el bien-constructor, no puedo asignarlo a @este. También intento algo como
MProduct.Constructor = (@this) => { var mole = new MProduct(@this)... };
Pero esta vez no puedo llamar a mi constructor. ¿Cómo se supone que debo hacer?
Hum, que no entendía mi pregunta. Tu ejemplo tiene buenos puntos. Sin embargo, necesito un simulacro de Producto que llame a los métodos originales, a excepción de ModifyPrice. Por eso necesito un CallBase = true (para un Stub) o un InstanceBehavior = MoleBehaviors.FallThrough (para un Mole). Además, y ese es el punto más importante, quiero saturar todas las instancias futuras de Producto con mi simulacro. Es por eso que necesito burlarme del constructor. – Jeco
@Jeco Puede que te haya malinterpretado de nuevo, pero parece que puedes lograr lo que quieres con la clase 'AllInstances'. – Gebb
Sigue siendo una buena respuesta. Me disculpo por mis ejemplos incompletos, siempre tengo otros puntos en mente. Estaba comparando varios frameworks burlones con Moles, así que traté de estudiar todas las posibilidades. Pandear todas las instancias futuras de un objeto con un Moles parece ser una buena idea (traté de verificar todas las llamadas a los métodos y representó a muchas 'AllInstances' en comparación con una 'NonImplementedException'). Estaba tratando desesperadamente de usar el constructor para hacer '@ this = aMole' ... Pero como se dice en el manual de Moles, es realmente un marco de aislamiento y no un marco simulado. Gracias por las respuestas – Jeco