2009-01-07 21 views
5

我想測試一個類有EventHandler分配給一個事件。基本上我使用我的IoC容器爲我連接EventHandlers,並且我想檢查它們是否正確分配。所以真的,我正在測試我的IoC配置。測試一個事件有一個EventHandler分配

[Test] 
public void create_person_event_handler_is_hooked_up_by_windsor() 
{ 
    IChangePersonService changePersonService = IoC.Resolve<IChangePersonService>(); 

    // check that changePersonService.PersonCreated has a handler attached 
} 

我不知道如何測試changePersonService.PersonCreated有任何附加到它雖然。

任何想法?

謝謝。

回答

2

不問你用這個假裝什麼,測試和枚舉已註冊事件的唯一方法是,如果你將它們註冊到你自己的集合中。

見這個例子:

public class MyChangePersonService : IChangePersonService 
{ 
    private IList<EventHandler> handlers; 

    private EventHandler _personEvent; 

    public event EventHandler PersonCreated 
    { 
     add 
     { 
      _personEvent += value; 
      handlers.Add(value); 
     } 

     remove 
     { 
      _personEvent -= value; 
      handlers.Remove(value); 
     } 
    } 

    public IList<EventHandler> PersonEventHandlers { get { return handlers; } } 

    public MyChangePersonService() 
    { 
     handlers = new List<EventHandler>(); 
    } 

    public void FirePersonEvent() 
    { 
     _personEvent(this, null); 
    } 
} 

然後,你可以用道具PersonEventHandlers訪問註冊的處理程序。

你能實施這樣的事情嗎?

+0

謝謝布魯諾,我想這就是我要做的。 – mattcole 2009-01-07 15:19:43

0

聽起來像是你試圖督促爲了一些信息,你的對象來斷言這是一件事或其他。請注意,這不一定是單元測試,因爲您沒有測試功能。

如果您必須對此進行測試,您似乎需要在IChangePersonService中打開一個公共API以獲取註冊的事件處理程序。

1

它看起來像我試圖單位測試溫莎城堡。由於它可能已經有單元測試,我認爲這是浪費精力。你最好測試你的對象是否在正確的時間提出適當的事件(可能是通過註冊一個模擬對象作爲事件處理器)。

0

這不是單元測試,而是集成測試。我不是在測試溫莎城堡,而是我的配置。我正在測試所有我的分離類正在按照我的意圖掛鉤。最終,我想測試一下,我的配置是否正確地將事件連接到了我想要的位置,但我不確定C#會如何,而不會像Yuval所說的那樣改變我的API。

相關問題