单元测试事件处理程序的代码

时间:2013-11-23 13:48:15

标签: .net unit-testing ncover

如何测试事件处理程序的代码?

我有这个

    [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声明事件处理程序本身的代码未经过测试('thow e.Exception'标记为红色)。

我可以尝试直接调用事件处理程序方法吗?如何创建ValidationEventArgs的实例?

1 个答案:

答案 0 :(得分:0)

测试中有几个问题。对于

 [ExpectedException(typeof(XmlException))]

使用XmlSchemaException

 [ExpectedException(typeof(XmlSchemaException))]

在您的测试名称中提供您期望的内容。例如

 public void InvalidXmlSchema_EventHandlerExecutes_ThrowsXmlSchemaException()

您也不需要尝试{} catch {}块。正确的异常类型将由ExpectedException Attr。

传播和处理

请记住,由于您是读取wrongXSDFile.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;
    }