【问题标题】:C# Raising Events with custom delegate type on fake object with fakeiteasyC# 使用 fakeiteasy 在假对象上使用自定义委托类型引发事件
【发布时间】:2016-05-31 22:13:26
【问题描述】:

根据 fakeiteasy 的文档,我所要做的就是:

public delegate void CustomEventHandler(object sender, CustomEventArgs e);

event CustomEventHandler CustomEvent;

fake.CustomEvent += Raise.With<CustomEventHandler>(fake, sampleCustomEventArgs);

我在我的代码中尝试了如下:

public delegate void RowStateHandler(object sender, RowStateHandlerArgs e);
public class RowStateHandlerArgs : EventArgs
{
    public bool Selected { get; set; }
    public string CampaignId { get; set; }
}

... 视图的界面:

public interface ICampaignChannelView
{
     event RowStateHandler RowStateChanged;
}

我的单元测试中的 sn-p:

ICampaignChannelView v = A.Fake<ICampaignChannelView>();
RowStateHandlerArgs args = new RowStateHandlerArgs() {CampaignId = "1", Selected = true};
v.RowStateChanged += Raise.With<RowStateHandler>(v, args);

我得到以下编译错误:

Error   CS0029  Cannot implicitly convert type
FakeItEasy.Raise<Add_in.UI.Wizard.RowStateHandler> to
Add_in.UI.Wizard.RowStateHandler    Add-inTests C:\..\WizardPresenterTests.cs

错误 CS1503 参数 2:无法从 'Add_in.UI.Wizard.RowStateHandlerArgs' 到 'Add_in.UI.Wizard.RowStateHandler' Add-inTests C:..\WizardPresenterTests.cs

非常感谢任何帮助!

【问题讨论】:

    标签: c# unit-testing fakeiteasy


    【解决方案1】:

    听起来您使用的是旧版本的 FakeItEasy,而不是该文档所指的版本。 Raising Events documentation page 有两种口味。一个用于 FakeItEasy 1.x,一个用于2.x

    更新:文档已经改名为moved to readthedocs,它有更好的系统来维护不同版本的文档。)

    我刚刚检查了这两个页面,并使用您的代码构建了两个测试项目。我最终改变的唯一一行是

     v.RowStateChanged += Raise.With<RowStateHandler>(v, args);
    

    在 FakeItEasy 1.25.3 下,此调用有效:

    v.RowStateChanged += Raise.With(v, args).Now;
    

    在 FakeItEasy 2.0.0 下,此调用有效:

    v.RowStateChanged += Raise.With<RowStateHandler>(v, args);
    

    【讨论】:

    • 是的,我们升级到了 2.0.0-rc1,现在它可以工作了。起初,对我们来说并不明显,我们阅读的文档是针对 2.0.0 的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    相关资源
    最近更新 更多