2017-09-24 2 views
0

배경

과 같이 내가 ITestAction 속성 내에서 각 테스트의 결과/결과를 알고 필요에 일하고 있어요 NUnit과 프레임 워크의 확장 :병렬 테스트에서 NUnit TestContext.CurrentContext를 사용해도 안전합니까?

public class MyFrameworkExtensionAttribute : Attribute, ITestAction 
{ 
    public void BeforeTest(ITest test) 
    { /* Omitted, not relevant to this question */ } 

    public void AfterTest(ITest test) 
    { 
    var result = TestContext.CurrentContext.Result; 
    var resultIsSuccess = result.Outcome.Status == TestStatus.Passed; 
    // Then go on to do stuff with that resultIsSuccess variable 
    } 
} 

참고 AfterTest의 첫 번째 행 방법; 정적 참조를 사용하고 있습니다 : TestContext.CurrentContext. ITest 인터페이스는 테스트 결과를 노출하지 않으므로 테스트 컨텍스트가 유일한 방법 인 것 같습니다.

그리고 지금은 내 질문에 질문

- NUnit과 3.x를이 ParallelizableAttribute를 통해 병렬 테스트를 실행하는 기능이 포함되어 있기 때문에 - 궁금 해요 : 그것은 현재 테스트 컨텍스트에 대한 정적 참조를 사용하는 것이 안전합니까? 여기서 걱정해야 할 스레드 안전 문제가 있습니까? 정적 참조에 의지하지 않고 테스트 결과를 얻는 더 좋고/더 강력한 방법이 있습니까?

중요한 경우를 대비하여 NUnit 프레임 워크 3.7.1을 사용하고 있습니다.

답변

1

짧은 대답 : 예.

중간 크기 대답 : 정적 속성이지만 각 테스트마다 고유 한 실제 컨텍스트에 쉽게 액세스 할 수 있습니다.

설명 : TestContext.CurrentContext을 사용할 때마다 TestExecutionContext.CurrentContext의 래퍼에 불과하므로 값 비싼 작업이 아닌 새로운 컨텍스트가 만들어집니다. 현재 실행 컨텍스트는 nunit 프레임 워크의 플랫폼 빌드에 따라 다양한 방식으로 유지됩니다. 데스크톱 .NET의 경우 CallContext을 사용하여 저장합니다.

관련 문제