2012-07-19 4 views
6

모든 테스트에서 ClassInitialize가 호출되는 것 같습니다. 나는 그것이 새로운 클래스가 실제로 모든 테스트를 위해 생성되기 때문에 그것이라고 생각한다.전체 클래스에 대해 MSTest ClassInitialize

왜? 다른 모든 프레임 워크는 이것을하지 않습니다!

어쨌든 ... 클래스에 하나의 메소드 (정적이 아님)를 실행해야합니다. 또한 클래스의 동일한 인스턴스 내에서 모든 테스트 메소드를 실행해야합니다.

외륜없이 개울을 올릴 수 있습니까?

+0

그냥 전화를 걸 수없는 다른 이유가 있습니다. – Wug

+1

모두 한 번에 테스트 할 수 있습니까? 그렇게 할 수는 있지만 어떤 테스트가 실패했는지 즉시 알 수 있습니다. "AllTests"라는 테스트가 하나 있습니까? –

답변

15

ClassInitializeTestMethod이 호출되기 전에 MSTest에서 한 번 호출됩니다 (비고 here 참조). TestInitialize은 각 테스트 메소드 전에 한 번 호출됩니다. MSTest는 각 TestMethod 호출에 대한 테스트 클래스의 새 인스턴스를 만듭니다. 이것이 ClassInitialize이 정적 방법 인 이유입니다.

클래스에 하나의 메소드 (정적이 아님)를 실행해야합니다. 또한 클래스의 동일한 인스턴스 내에서 모든 테스트 메소드를 실행해야합니다.

TestClass 또는 테스트중인 클래스 (실제로 테스트하는 클래스)에서 하나의 메서드를 실행해야한다는 의미입니까?

어느 경우 든 TestClass에 정적 멤버가 있고 ClassInitialize에 한 번 초기화 할 수 있습니다. 그것은 한 번만 생성되며 테스트의 수명 동안 존재합니다. 메소드를 한 번만 호출 할 수 있습니다. 그런 다음 각 테스트 메소드에서이 단일 인스턴스를 사용할 수 있습니다.

MSTest는 다른 클래스의 테스트를 인터리브 할 수 있다는 점에 유의해야합니다. 따라서 둘 이상의 ClassInitialize에서 액세스 할 수있는 전역 변경 가능 상태 (또는 해당 문제에 대한 테스트)가있는 경우 예기치 않은 상황이 발생할 수 있습니다. 이러한 이유로 통계학은 피해야합니다.

모든 메소드를 동일한 인스턴스에서 실행해야한다는 요구 사항은 매우 드뭅니다. 아마도이 제약 조건을 제거하기 위해 코드를 리팩터링하는 방법이 있을까요?

관련 문제