6

私がテストしているアプリケーションは、次のようなカスタムデリゲートに基づくイベントでいっぱいです。

public delegate void NameChangedHandler(string name);
public event NameChanged OnNameChanged;
...
public void ChangeYourName(string newName)
{
    if( NameChanged != null )
        NameChanged(newName);
}

これらのイベントを生成するクラスをモックアウトして、これらのイベントをテスト対象のクラスに上げたいと思います。

FakeItEasyは、またはRaise.With()の従来のイベントシグネチャを使用してイベントを発生さ せるために使用できることは知っていますが、自分の状況で何をすべきかわかりません。 MyHandler(object sender, EventArgs e)MyHandler(EventArgs e)

何か案は?

4

2 に答える 2

3

FakeItEasy 2.0.0以降、これが可能になりました。

Raising Eventsのドキュメントのトピックには完全なストーリーがありますが、要点はあなたが使用することです

fake.OnNameChanged += Raise.With<NameChanged>(newName);

いつものように、イベントは仮想でなければなりません。

于 2016-05-27T20:39:05.887 に答える
0

いつでもChangeYourName仮想化してメソッドを置き換えることができます。

A.CallsTo(()=>fakeClass.ChangeyourName(A<string>._)).Invokes((x)=>invokeMockEvent(x));

それがあなたが望んでいたものではない場合、私はChangeYourNameあなたが公開されているならあなたはあなたの偽のクラスを作成することができると思います

var class = new Class();
class.OnNameChanged += (x)=>
{
    Assert.AreEqual(x,"tim");
};

class.ChangeYourName("tim");
于 2013-08-12T17:45:22.077 に答える