나는 가난한 사람의 테스트 프레임 워크를 쓰고있다. 내 콘솔 응용 프로그램에서, 나는이 있습니다 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) 및 열린 괄호 (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