현재 일련의 테스트를 실행하고 있습니다. 최대한 스위트를 병렬화하고 싶습니다. 내가 가진 한 가지 큰 문제는 일부 테스트의 경우 특정 글로벌 응용 프로그램 상태를 한 방향으로 설정해야하고 일부는 다른 방향으로 설정해야한다는 것입니다. NUnit 테스트 러너 그룹을 테스트에 필요한 전역 상태를 기반으로 테스트를 수행 한 다음 각 그룹 내에서 서로 병렬로 테스트를 실행하고 그룹간에 전역 상태를 수정할 수있는 방법이 있습니까?NUnit - 키별로 테스트를 그룹화하고 병렬로 각 그룹에서 테스트를 실행할 수 있지만 시리즈별로 각 그룹을 실행할 수 있습니까?
예를 들어 Foo
테스트에 필요한 값을 지정하는 데 사용할 수있는 Foo
및 사용자 지정 속성 [RequiresFoo(X)]
이 있다고 가정 해 봅니다. 런타임시 NUnit은 모든 테스트를 인수로 RequiresFoo
으로 그룹화하고 표시되지 않은 테스트는 기본값 인 Foo
값으로 계산합니다. N
는 해당 그룹의 Foo
값입니다
- 설정
Foo = N
로합니다. - 해당 그룹의 모든 테스트를 병렬로 실행하십시오.
이상적인 세계에서 저는이 글로벌 상태에 대한 모의 시스템을 갖게 될 것입니다. 그러나 지금 당장은 필요하지 않은 많은 시간이 걸릴 것입니다. NUnit을 사용하여이 작업을 수행 할 수 있습니까?
변수를 설정하는 것뿐만 아니라 그룹간에 어떤 방법을 실행할 수 있어야합니다. 실제로 다루는 전역 컨텍스트는 마이크로 서비스 시작 또는 중지, 구성 파일 업데이트 등을 포함 할 수 있습니다. 이러한 요구 사항을 사용자 지정 특성에 전달할 문자열로 serialize 할 수 있지만 런타임에는 임의적으로 실행할 수 있어야합니다. 요구 사항을 구문 분석하고 환경을 재구성하는 코드.
여기에 의사 코드 예제가 나와 있습니다. 기본 테스트로
이 같은 일련의 실행 :
foreach (var t in allTests)
{
Run(t);
}
NUnits 기본 병렬 동작은 다음과 같이이다 : 당신으로
var grouped = allTests
.GroupBy(t => GetRequirementsFromCustomAttributes(t));
foreach (var g in grouped)
{
SetGlobalState(g.Key);
Parallel.ForEach(g, t => Run(t));
}
감사합니다. Charlie. 네임 스페이스 비품에 대해서는 몰랐습니다. 그건 그냥 속임수를 할 수 있습니다. – JamesFaix
작은 기술 수정 : 우리는 네임 스페이스 제품군을 보유하고 있습니다. 그러나 네임 스페이스에 SetUpFixture를 만들면 더 높은 수준의 OneTime 설정 및 해체를 허용 할뿐만 아니라 네임 스페이스 제품군의 작업을 대신 수행합니다. 이 경우, 속성을 표시 할 수있는 뭔가를 제공하기 위해 SetupFIxture를 제안합니다. 특성은 네임 스페이스에 적용되지 않습니다. – Charlie