如何使用Moles作为构造函数?

| 我有这样的课:
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;
    }  
我希望ModifyPrice对特定值不执行任何操作,但我也想调用将价格设置为10的构造函数。我尝试了如下操作:
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;
但是,即使使用良好的构造函数对false进行了很好的初始化,我也无法将其分配给@this。我也尝试像
MProduct.Constructor = (@this) => { var mole = new MProduct(@this)... };
但是这次我不能调用我的构造函数。我应该怎么办?     
已邀请:
您不需要模拟构造函数,,3ѭ类的无参数构造函数已经可以满足您的要求。 将一些调试输出添加到
Product
public class Product
{
    private float _price;
    public Product()
    {
        _price = 10.0F;
        Debug.WriteLine(\"Initializing price: {0}\", _price);
    }
    public void ModifyPrice(float modifier)
    {
        _price = _price*modifier;
        Debug.WriteLine(\"New price: {0}\", _price);
    }
}
仅模拟
ModifyPrice
方法。
[TestMethod]
[HostType(\"Moles\")]
public void Test1()
{
    // Call a constructor that sets the price to 10.
    var fake = new SProduct { CallBase = true };
    var mole = new MProduct(fake)
    {
        ModifyPriceSingle = actual =>
        {
            if (actual != 20.0f)
            {
                MolesContext.ExecuteWithoutMoles(() => fake.ModifyPrice(actual));
            }
            else
            {
                Debug.WriteLine(\"Skipped setting price.\");
            }
        }
    };
    fake.ModifyPrice(20f);
    fake.ModifyPrice(21f);
}
查看调试输出以确认一切正常。     初始价格:10     跳过设置价格。     新价格:210 顺便说一句,您不需要在这里使用存根,
var fake = new SProduct { CallBase = true };
创建一个
Product
的实例就足够了。
var fake = new Product();
更新: 像这样的
AllInstances
类可以实现单个方法的模拟
MProduct.Behavior = MoleBehaviors.Fallthrough;
MProduct.AllInstances.ModifyPriceSingle = (p, actual) =>
{
    if (actual != 20.0f)
    {
        MolesContext.ExecuteWithoutMoles(() => p.ModifyPrice(actual));
    }
    else
    {
        Debug.WriteLine(\"Skipped setting price.\");
    }
};

// Call the constructor that sets the price to 10.
Product p1 = new Product();
// Skip setting the price.
p1.ModifyPrice(20f);
// Set the price.
p1.ModifyPrice(21f);
    
MProduct.Behavior = MoleBehaviors.Fallthrough;
    

要回复问题请先登录注册