【发布时间】:2022-09-29 05:08:38
【问题描述】:
我有一些 .rdlc 报告。我正在尝试为他们编写一些测试,并且运行良好。如果我指定的参数不匹配,我将得到失败的测试,并且对于一个报告,如果报告数据集中的字段与我绑定的类型不匹配,我将得到一个异常。
到目前为止,这很好,除了字段异常仅在一个报告中起作用。对于其他报告,缺少字段并且它们不会产生异常;相反,这些值在呈现的报告上只是显示为空。
如何在测试时判断我的数据类型中的字段是否与报告匹配?
我有一些 .rdlc 报告。我正在尝试为他们编写一些测试,并且运行良好。如果我指定的参数不匹配,我将得到失败的测试,并且对于一个报告,如果报告数据集中的字段与我绑定的类型不匹配,我将得到一个异常。
到目前为止,这很好,除了字段异常仅在一个报告中起作用。对于其他报告,缺少字段并且它们不会产生异常;相反,这些值在呈现的报告上只是显示为空。
如何在测试时判断我的数据类型中的字段是否与报告匹配?
在搜索 RDLC 代码后,我确定字段引用只会在从复杂的“可见性”表达式呈现报表时抛出;缺少的字段不会从文本框中引发错误,包括 Tablix 单元格。
但是,我确实发现会生成警告。这些警告似乎被发送到调试输出。我没有找到从LocalReport 对象本身查看它们的方法。
通过拦截调试输出,当缺少字段时,我能够生成有意义的失败测试。我的报告渲染测试看起来像这样:
// create and setup your LocalReport
// intercept debug writing
using var writer = new StringWriter();
using var listener = new TextWriterTraceListener(writer);
Debug.Listeners.Add(listener);
byte[] bytes;
try {
bytes = localReport.Render("PDF");
} finally {
Debug.Listeners.Remove(listener);
}
var warnings = writer.ToString();
if (warnings != "")
Assert.Fail(warnings);
Assert.IsNotNull(bytes);
Assert.IsTrue(bytes.Length > 0);
【讨论】: