2

MSTest Unit 테스트로 실행되는 CodedUI 테스트 세트가 있습니다. AssemblyCleanup에는 외부 데이터베이스에 저장된 테스트 실행 결과를 전자 메일로 보낼 메서드가 있습니다. 마지막 실행 세션 동안 얼마나 많은 단위 테스트가 실행되었는지 프로그래밍 방식으로 결정할 수 있습니까? 우리가 10 회 미만의 테스트를 수행하는 중이라면 이메일을 보내고 싶지 않습니다. 이렇게하면 테스트를 디버깅 할 때가 아니라 전체 CodedUI Suite를 실행할 때만 전자 메일을받을 수 있습니다. 현재 SendEmail 플래그를 수동으로 설정해야하지만 프로그래밍 방식으로 결정해야합니다.얼마나 많은 단위 테스트가 실행되었는지 프로그래밍 방식으로 결정합니까?

+1

이 나에게 중요한 해킹/안티 패턴 같은 소리에 사용할 수 있습니다. 단위 테스트 세트에 이런 종류의 툴링을 추가하고 싶지 않습니다. –

+0

+1. 파괴 테스트를 통해 테스트가 끝나면 결과가 전송되지 않습니다. 더 좋은 방법은 vstest.console.exe/logger : trx를 사용하고 테스트 결과를 위해 trx 파일을 구문 분석하는 것입니다. 이 경로를 결정하려면 http://stackoverflow.com/questions/14483837/specifying-results-filename-for-vstest-console-exe를 참조하십시오. –

답변

3

실행 된 테스트의 수를 유지하는 기본 테스트 클래스를 사용하십시오. 다른 모든 테스트 클래스는이 클래스를 상속하고 TestInitialize에서 해당 속성을 증가시킵니다.

다음 코드를 실행하고 테스트 결과를 확인하십시오.

[TestClass] 
public class BaseTestClass 
{ 
    private static int _executedTests; 
    private static int _passedTests; 

    [AssemblyCleanup()] 
    public static void AssemblyCleanup() 
    { 
     Console.WriteLine("Total tests executed: {0}", _executedTests); 
     Console.WriteLine("Total passed tests: {0}", _passedTests); 
    } 

    protected void IncrementTests() 
    { 
     _executedTests++; 
    } 

    protected void IncrementPassedTests() 
    { 
     _passedTests++; 
    } 
} 

[TestClass] 
public class TestClass : BaseTestClass 
{ 
    [TestInitialize] 
    public void TestInitialize() 
    { 
     IncrementTests(); 
    } 

    [TestCleanup] 
    public void TestCleanup() 
    { 
     if (TestContext.CurrentTestOutcome == UnitTestOutcome.Passed) 
     { 
      IncrementPassedTests(); 
     } 
    } 

    [TestMethod] 
    public void TestMethod1() 
    { 
    } 

    [TestMethod] 
    public void TestMethod2() 
    { 
     Assert.Fail(); 
    } 

    public TestContext TestContext { get; set; } 
} 

참고 : 같은 코드가 CodedUITests

+0

방금 ​​구현하려고했는데 다른 클래스에서 테스트를 실행할 때마다 새로운 객체가 만들어 질 것을 의미하는 다중 테스트 클래스가 있습니다. 이 클래스들 각각은 BaseTestClass를 상속 한 TestClass의 새로운 인스턴스입니다. 이것은 각 TestClass가 자신의 수를 가질 것이라는 것을 의미합니다. 이 정보에 액세스 할 수없는 AssemblyCleanup에서 전자 메일을 보내고 있는지 확인합니다. – PBMax

+0

@PBMax, 내 코드는 몇개의 테스트 클래스와 상관없이 작동합니다. 보시다시피,'BaseTestClass'의 카운터는 정적이므로 테스트 클래스의 모든 다른 인스턴스에 대해 동일합니다. 다음 테스트 실행시에만 재설정됩니다. 그것을 시도하십시오 ... – Schaliasos

+0

위대한. 나는 그것을 시도 할 것이다! – PBMax

관련 문제