모든 테스트가 실행되기 전에 코드를 한 번 실행할 수 있습니까?


112

기본적으로 일련의 테스트 실행을 시작하기 전에 MSTest에 약간의 코드를 실행하라고 말하고 싶습니다. 기본적으로 제가하고 싶은 것은 Main().

이 작업을 수행하려는 이유는 통합 테스트를 실행하는 동안 log4net으로 로깅을 수행하고 싶기 때문입니다. log4net.Config.XmlConfigurator내 테스트 어셈블리에서 읽었을 때 이미 호출 한 어셈블리 특성을 사용할 수 없습니다 LoggerManager. 문서는 코드 진입 점에서 명시 적으로 log4net을 구성하도록 권장하지만 내 테스트에서는 어디에 있습니까?

TestDriven.NET 및 MSTest 러너에서 테스트를 실행할 수 있어야합니다.

답변:


153

FWIW, 어셈블리의 모든 단위 테스트가 실행되기 전에 AssemblyInitialize 특성을 사용하여 코드를 실행할 수 있습니다 .

[TestClass]
public class SetupAssemblyInitializer
{
    [AssemblyInitialize]
    public static void AssemblyInit(TestContext context)
    {
        // Initalization code goes here
    }
}

단위 테스트 어셈블리가 두 개 이상인 경우 두 개 이상의 어셈블리를 포함하는 항목을 알지 못합니다.

내가 아는 한 이것은 Main에 해당하는 것과 비슷합니다.

있습니다 AssemblyInitialize-decorated 방법이 있어야 A의 수 TestClass하나 이상 포함 -decorated 클래스 TestMethod그렇지 않으면 것, -decorated 방법을 하지 실행!


1
나는 비슷한 문제가 있었고 (MSTest에만 해당) 잘 작동했습니다. 감사합니다 :)
Oscar Foley

1
MsTest 및 TestDriven.NET 모두에서이 작업을 수행하는 데 문제가있는 다른 사용자의 경우 정적 플래그를 사용하여 ClassInitialize에서 코드를 실행할지 여부를 결정할 수 있습니다 (MsTest에서는 작동하지 않음).
Carl

7
참고 : 테스트 엔진은 해당 메서드가 TestClass 특성으로 표시된 클래스의 멤버 인 경우에만 AssemblyInitialize 특성으로 표시된 메서드를 실행합니다.
Jowen

5
@Jowen : 테스트 엔진은 해당 메서드가 TestClass 특성으로 표시된 클래스의 구성원 인 경우에만 AssemblyInitialize 특성으로 표시된 메서드를 실행합니다 and contains methods that are marked with the TestMethod attribute.
oɔɯǝɹ 2015-06-01

3
AssemblyInitialize로 표시된 메서드는 TestMethod 특성으로 표시된 다른 메서드없이 Visual Studio 2015 Ultimate에서 실행됩니다.
Chris

63

완료를 위해 다음은 MSTest의 "이전 코드 실행"옵션입니다.

  • [AssemblyInitialize]해당 어셈블리의 테스트가 실행되기 전에 어셈블리 당 한 번 코드를 실행하는 데 사용 합니다.
  • [ClassInitialize]메서드가 정의 된 클래스의 테스트 전에 클래스 당 한 번 코드를 실행하는 데 사용 합니다.
  • [TestInitialize]메서드가 정의 된 클래스의 모든 테스트 전에 코드를 실행하는 데 사용 합니다.

12
이러한 특성의 정리 대응은 작업 눈물 다운에 대한 정리 접미사 (예 : ClassCleanup)입니다
Yair Nevet

13

MS Test 헤더에서 이것을 볼 수 있습니다.

// Use ClassInitialize to run code before running the first test in the class
//[ClassInitialize()]
//public static void MyClassInitialize(TestContext testContext) { }

이것은 한 클래스의 테스트 전에 실행됩니다.

모든 테스트 전에 무언가를 실행하고 싶은 것 같습니다.

테스트 실행 구성에는 설정 스크립트 옵션도 있습니다.


누락 된 것이 없으면 설정 스크립트는 테스트 AppDomain에서 코드를 실행하는 데 도움이되지 않습니다.
George Mauer

2
아마 나야. "테스트 AppDomain에서 코드 실행"이라고 말했을 때 내가 당신을 따르는 지 잘 모르겠습니다. 다른 질문이라면 일련의 테스트 전에 코드를 실행하고 싶다는 질문을 읽었습니다. "설치 스크립트 및 정리 스크립트는 테스트 실행에 포함 된 테스트 유형에 관계없이 테스트 실행 전후에 실행됩니다." msdn.microsoft.com/en-us/library/ms182480%28VS.80%29.aspx
Maestro1024 2010 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.