私は自分の貧しい人のテストフレームワークを書いています。私のコンソールアプリケーションでは、私はこれを持っている:TestingFramework以内StackTraceから正しい行番号を取得するにはどうすればよいですか?
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
}
私はこのラインがあります。
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)を発信し、開いているparen(12)の回線番号ではないことを報告する方法を教えてもらえますか?
ありがとうございました。私はこの問題を考え出した
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;
}
}
特定の種類のクラスまたは識別子のあるものを探してスタックを歩くことができます。メソッドとその所有者を見てフレームをループするか?ただの考え –
@ハンスパッサント:私のタイトルを改善してくれてありがとう。 – philologon