2013-11-23 320 views
0

如何測試事件處理程序的代碼?單元測試事件處理程序的代碼

我有這個

[TestMethod] 
    [ExpectedException(typeof(XmlException))] 
    public void TheXMLValidationEventHandlerWorksOK() 
    { 
     string xSDFilePath = @"XML Test Files\wrongXSDFile.xsd"; 
     try 
     { 
      XmlSchema xmlSchema = XmlSchema.Read(new StreamReader(xSDFilePath), XMLValidationEventHandler); 
     } 
     catch (System.Xml.XmlException e) 
     { 
      Assert.IsNotNull(e); 
      throw e; 
     } 
    } 

    private void XMLValidationEventHandler(object sender, ValidationEventArgs e) 
    { 
     throw e.Exception; 
    } 

但NCover指出,事件的代碼handlet本身不是測試(「thow e.Exception」被標記爲紅色)。

我可以嘗試直接調用事件處理程序方法嗎?我如何創建ValidationEventArgs的實例?

回答

0

在測試中有幾個問題。對於

[ExpectedException(typeof(XmlException))] 

使用XmlSchemaException

[ExpectedException(typeof(XmlSchemaException))] 

在您的測試名稱提供正是你期待什麼。例如

public void InvalidXmlSchema_EventHandlerExecutes_ThrowsXmlSchemaException() 

您也不需要嘗試{} catch {}塊。正確的異常類型會傳播並由ExpectedException屬性處理。

請記住,由於您是讀取錯誤的文件系統XSDFile.xsd,因此這不是單元測試。這是一個集成測試。測試會拋出一個XmlSchemaException。以下是測試將通過無效的XSD。

[TestMethod] 
    [ExpectedException(typeof(XmlSchemaException))] 
    public void InvalidXmlSchema_EventHandlerExecutes_ThrowsXmlSchemaException() { 
     string xSDFilePath = @"XML Test Files\wrongXSDFile.xsd"; 
     XmlSchema.Read(new StreamReader(xSDFilePath), XMLValidationEventHandler); 
    } 

    private void XMLValidationEventHandler(object sender, ValidationEventArgs e){ 
     throw e.Exception; 
    } 
+0

我正在檢查所有帖子,我忘記標記爲答案。抱歉耽擱了 – Kaikus