我試圖在cSharp中引發事件來通知我的應用程序中的代碼更改,以便具有tellDontAsk方案。使用事件來應用TellDontAsk模式
我必須從事件類實現
public class SimpleTellDontAsk : ISomeEvent
{
public void doSomething(string text, EventHandlerArgs args)
{
Console.WriteLine("Email this message {0}", text);
//sending message with email
args.IsDo = true;
RaiseEvent(this, args);
}
public event EventHandler RaiseEvent;
}
我這樣定義如下
public interface ISomeEvent
{
event EventHandler RaiseEvent;
}
public class SomeEvent : ISomeEvent
{
public event EventHandler RaiseEvent;
}
public class EventHandlerArgs : EventArgs
{
public bool IsDo { get; set; }
}
我嘗試使用我的代碼與NUnit測試我的事件類的簡單類
[TestFixture]
public class TestSimpleTellDontAsk
{
[Test]
public void Given_Text_When_doSomething_Then_ShouldPubliushArgs()
{
var tellDontAsk = new SimpleTellDontAsk();
var senderEventHandlerArgs = new EventHandlerArgs();
tellDontAsk.doSomething("test message", senderEventHandlerArgs);
Assert.IsTrue(senderEventHandlerArgs.IsDo);
}
}
當我運行測試時,它會出現空引用異常
System.NullReferenceException:未將對象引用設置爲對象的實例。
我相信有東西丟失,但無法弄清楚,任何想法?
您是否在調試器中運行代碼並確定引發此異常的行? – 2013-02-27 11:13:51
是的它在RaiseEvent(this,args);行 – wikinevis 2013-02-27 11:15:42
您通常在觸發事件時執行類似[this](http://stackoverflow.com/a/672666/238902)的操作。這至少應該確保你不會得到nullreference異常 – Default 2013-02-27 11:20:14