2016-03-16 9 views
0

Согласно документации fakeiteasy все, что я должен сделать, это:C# вызова событий с пользовательским типом делегата от поддельного объекта с 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; 
} 

сниппет в моем тестовом модуле:

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 

и

Error CS1503 Argument 2: cannot convert from 'Add_in.UI.Wizard.RowStateHandlerArgs' to 'Add_in.UI.Wizard.RowStateHandler' Add-inTests C:..\WizardPresenterTests.cs

Любая помощь очень ценится!

ответ

0

Похоже, вы используете более старую версию FakeItEasy, о которой идет речь в документации. Raising Events documentation page имеет два аромата. Один для FakeItEasy 1.x и один для 2.x.

(Update: the documentation has since been moved to readthedocs , which has a better system for maintaining different versions of the documentation.)

Я только что проверил две страницы и построил два тестовых проекта с вашим кодом. Единственная линия, которую я в конечном итоге изменение было

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); 
+0

Да, мы обновили до 2.0.0-rc1, и теперь он работает. Сначала нам не было очевидно, что документы, которые мы читали, были для 2.0. Благодарю. – janhamburg