如何测试事件处理程序的代码?
我有这个
[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的实例?
答案 0 :(得分:0)
测试中有几个问题。对于
[ExpectedException(typeof(XmlException))]
[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;
}