我正在编写自己的穷人测试框架。在我的控制台应用程序中,我有这个:
static void Main(string[] args)
{ // Line 12
double adouble = 77;
double expected = 70;
TestingFramework.assertEquals<double>(expected, adouble - 7); // Line 15
TestingFramework.assertEquals<double>(expected, adouble - 6); // Line 16
}
在TestingFramework中我有这一行:
System.Console.WriteLine("Success, File {0}, Line {1}",
new System.Diagnostics.StackTrace(true).GetFrame(1).GetFileName(),
new System.Diagnostics.StackTrace(true).GetFrame(1).GetFileLineNumber());
但是当我运行测试时,它告诉我两个函数调用的FileLineNumber都是12。此外,它给我正确的文件名,所以我认为它引用了正确的框架。
有人可以告诉我如何让它向我报告发起呼叫的行号(15然后是16),而不是打开的电话号码(12)吗?
感谢。
答案 0 :(得分:1)
附加到我的评论中,如下所示:
foreach(var frame in StackTrace.GetFrames())
{
System.Reflection.MethodBase method = frame.GetMethod ( );
Type type = method.DeclaringType;
// If this is what I am looking for
if ( type.IsSubclassOf( typeof(TestClassBase)) || type != typeof ( TestClassBase) )
{
System.Console.WriteLine("Success, File {0}, Line {1}", frame.GetFileName(), frame.GetFileLineNumber());
return;
}
}
答案 1 :(得分:0)
我已经找到问题以及如何解决它。
我在TestingFramework中重载了assertequals函数: 1)assertEquals(T expectedValue,T actualValue)和 2)assertEquals(T expectedValue,T actualValue,string comment)。
当客户端代码调用2-param函数时,该函数只调用3-param函数。这种不同的帧深度取决于它的调用方式。
所以我不得不添加
static int depth;
输入函数时递增的,退出时递减。这会将代码更改为:
new System.Diagnostics.StackTrace(true).GetFrame(depth).GetFileLineNumber());
现在有效。