2

我为我的 ASP.NET 应用程序提供了一个快速而简单的单元测试框架——一个 ASPX 页面,其中包含一个比较预期结果和实际结果并创建表的方法。它可以根据需要进行编译,让我可以快速创建和运行一系列测试,即使没有运行 VS.NET。

这是一个示例调用:

PrintResult(
   expected:  "$A$1", 
   actual:    RST.ExcelReference.FormatReferences("{{REF:1:0:1:0}}", false, 0, 0),
   arguments: "RST.ExcelReference.FormatReferences(\"{{REF:1:0:1:0}}\", false, 0, 0)");

(为清楚起见,添加了命名参数。)

正如您可以想象的那样,同步实际呼叫和该呼叫的显示是一件很痛苦的事情。

我知道我无法检查 中的参数值Environment.StackTrace,只能检查方法定义和行号。但就我而言,我不需要实际的参数值。我通常使用文字作为参数调用此方法,所以我需要的只是堆栈跟踪中 PrintResult() 入口点的源代码行。

源代码似乎以某种方式可用于 ASP.NET,因为它在出现未处理的异常时出现。我怎样才能访问它?

4

1 回答 1

2

Environment.StackTrace在堆栈跟踪的每一行中为您提供文件名和行号。它的格式清晰,应该易于解析。从文档中

StackTrace 属性格式化每个方法调用的堆栈跟踪信息,如下所示:

“在 FullClassName。FileName 中的 MethodName (MethodParams) :line LineNumber”

文字“at”前面有三个空格,如果调试符号不可用,则省略文字“in”和“:line”。占位符 FullClassName、MethodName、MethodParms、FileName 和 LineNumber 被替换为定义如下的实际值:

FullClassName 类的全名,包括命名空间。

MethodName 方法的名称。

MethodParms 参数类型/名称对的列表。每对用逗号 (",") 分隔。如果 MethodName 采用零参数,则省略此信息。

FileName 声明 MethodName 方法的源文件的名称。如果调试符号不可用,则省略此信息。

LineNumber FileName 中包含调用堆栈上指令的 MethodName 源代码的行号。如果调试符号不可用,则省略此信息。

在您暗示的问题中,这Environment.StackTrace不是您问题的答案,但似乎您应该能够解析出源文件名和行号,然后从文件中读取该行。我错过了什么?

于 2012-08-03T15:59:33.507 回答