2012-11-05 3 views
0

NUnit과 Selenium WebDriver로 웹 테스트를 쓰고 있습니다. 각 테스트가 끝나면 브라우저의 스크린 샷을 가져 와서 이미지를 저장하고 싶습니다. 이미지 이름을 이름과 동일하게하고 싶습니다. 하지만 테스트 메서드 이름을 얻는 데 문제가 있습니다. 부모 메서드 이름을 얻는 방법?

[Test] 
public void AbcTest_ShouldPass() 
{ 
    Assert.AreEqual(true, true); 
} 

여기 Test 각 후 실행 TearDown입니다 :

여기 테스트 방법

[TearDonw] 
[MethodImpl(MethoImplOptions.NoInlining)] 
public void TestCleanupNunit() 
{ 
    var methodName = new List<string>(); 
    for (int i = 0; i < 30; i++) 
     methodName.Add(i.ToString() + " is " + new StackTrace(i, true).GetFrame(0).GetMethod().Name); 

} 

하지만 난 methodName 볼 때, 나는 AbcTest_ShouldPass를 찾을 수 없습니다.

0 is TestCleanupNUnit 
1 is InvokeMethod 
2 is UnsafeInvokeInternal 
3 is Invoke 
4 is Invoke 
5 is InvokeMethod 
6 is InvokeMethod 
7 is RunTearDown 
8 is RunTest 
9 is RunTest 
10 is RunRepeatedTest 
11 is RunTestInContext 
12 is Run 
13 is RunAllTests 
14 is RunSuite 
15 is RunSuiteInContext 
16 is Run 
17 is Run 
18 is RunAllTests 
19 is RunSuite 
20 is RunSuiteInContext 
21 is Run 
22 is RunAllTests 
23 is RunSuite 
24 is RunSuiteInContext 
25 is Run 
26 is RunAllTests 
27 is RunSuite 
28 is RunSuiteInContext 
29 is Run 

나는이 post 보았다, 그러나 그것은 나에게 도움이되지 않았다.

답변

1

Nunit Framework는 NUnit.Framework.TestContext의 멤버 인 CurrentContext를 제공합니다.

TestContext.CurrentContext.Test.Name은 실행중인 테스트의 이름을 반환하고 TestContext.CurrentContext.Test.FullName은 네임 스페이스의 이름에서 시작하는 정규화 된 이름을 반환합니다.

0

테스트가 teardown 테스트를 호출하지 않기 때문에 가능합니다. 테스트 주자가 테스트 케이스를 호출 한 다음 테스트가 차례로 중단됩니다. 즉, 테스트 케이스 메소드 호출이 스택 트레이스의 다른 분기에있는 것입니다.

테스트 어태치먼트에 어딘가에 메소드의 이름을 캐시해야합니다. private 멤버 변수 일 수도 있고 각 테스트 케이스의 메서드에서 그 변수를 설정할 수도 있습니다. 그다지 우아하지는 않지만, 제가 생각할 수있는 유일한 방법입니다.

+0

이전에했던 것과 비슷합니다. 더 좋은 방법이 있기를 바랍니다. 하지만 추가 정보를 보내 주셔서 감사합니다. –

0

Unfourtunately, 단위 테스트의 설치 및 분리 방법은 동기 호출 스택의 일부로 실행되지 않지만 대신 테스트 엔진이 처리합니다. 이와 같이 Teardown 메소드에서 관찰 된 콜 스택은 테스트의 일부로 실행되는 메소드를 포함하지 않습니다.

0

테스트가 중단되는 대신 각 테스트가 끝날 때 호출하는 스크린 샷을 저장하는 비공개 방법을 사용할 수 있습니다. 그런 다음 스택 추적에는 예상대로 테스트 사례 메서드가 포함됩니다.

나는이 방법이 완벽하지 않다는 데 동의한다. 왜냐하면이 방법은 각 테스트 케이스에 추가해야한다는 것을 기억해야하기 때문이다. 그러나 적어도 그것이 일반적이며 하드 코딩 된 문자열에 메소드 이름을 포함하지는 않는다.

관련 문제