2016-03-18 14 views
1

Test yönteminin adını otomatik olarak hata ayıklama konsoluna vermek için, yönetilen VS C++ test kodundaki TestContext sınıfının TestAdı üyesini nasıl kullanabilirim?Yönetilen C++ Testlerinde TestContext.TestName Kullanma

Bulabildiğim her örnek C# 'da bulunuyor ve C++' yı düzgün bir şekilde çeviremiyorum. Burada, statik ClassInitialize yöntemi sırasında bir TestContext nesnesini yakalayarak bunu yapmaya çalışırım, ancak bu çalışmaz.

#include <windows.h> 
#include <msclr/marshal_cppstd.h> 

using namespace Microsoft::VisualStudio::TestTools::UnitTesting; 

[TestClass] 
public ref class SampleTestClass 
{ 

public: 

    [TestMethod] 
    void testMethod1() 
    { 

    } 

    [TestMethod] 
    void testMethod2() 
    { 

    } 

    [TestMethod] 
    void testMethod3() 
    { 

    } 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
// Tests Setup and Teardown                     // 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

    static TestContext^ myTestContext; 

    [TestInitialize] 
    void testCaseInitialize() 
    { 
     msclr::interop::marshal_context context; 
     std::wstring testName = context.marshal_as<std::wstring>(myTestContext->TestName); 
     std::wstring dbgSend = L"initializing " + testName; 
     ::OutputDebugString(dbgSend.c_str()); 
    } 

    [TestCleanup] 
    void testCaseCleanup() 
    { 
     msclr::interop::marshal_context context; 
     std::wstring testName = context.marshal_as<std::wstring>(myTestContext->TestName); 
     std::wstring dbgSend = L"tearing down " + testName; 
     ::OutputDebugString(dbgSend.c_str()); 
    } 

    [ClassInitialize] 
    static void testClassInitialize(TestContext^ context) 
    { 
     myTestContext = context; 
    } 

    [ClassCleanup] 
    static void testClassCleanup() 
    { 

    } 



}; 

Çıktı

[9404] initializing testMethod1 
[9404] tearing down testMethod1 
[9404] initializing testMethod1 
[9404] tearing down testMethod1 
[9404] initializing testMethod1 
[9404] tearing down testMethod1 

İstenilen Çıktı

[9404] initializing testMethod1 
[9404] tearing down testMethod1 
[9404] initializing testMethod2 
[9404] tearing down testMethod2 
[9404] initializing testMethod3 
[9404] tearing down testMethod3 

cevap

0

Bir meslektaşım benim için soruyu yanıtladı. TestInstance adında bir genel üye özelliği oluşturursanız, çerçeve sizin için otomatik olarak test içeriğini ayarlar. İşte benim için geçerli olan tam sözdizimi.

#include <windows.h> 
#include <msclr/marshal_cppstd.h> 

using namespace Microsoft::VisualStudio::TestTools::UnitTesting; 

[TestClass] 
public ref class SampleTestClass 
{ 

public: 

    [TestMethod] 
    void testMethod1() 
    { 

    } 

    [TestMethod] 
    void testMethod2() 
    { 

    } 

    [TestMethod] 
    void testMethod3() 
    { 

    } 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
// Tests Setup and Teardown                     // 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

    private: 
    TestContext^ myTestContextInstance; 

    public: 
    property TestContext^ TestContext 
    { 

     virtual Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ get() 
     { 
      return myTestContextInstance; 
     } 

     virtual void set(Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ value) 
     { 
      myTestContextInstance = value; 
     } 
    } 


    [TestInitialize] 
    void testCaseInitialize() 
    { 
     msclr::interop::marshal_context context; 
     std::wstring testName = context.marshal_as<std::wstring>(myTestContextInstance->TestName); 
     std::wstring dbgSend = L"initializing " + testName; 
     ::OutputDebugString(dbgSend.c_str()); 
    } 

    [TestCleanup] 
    void testCaseCleanup() 
    { 
     msclr::interop::marshal_context context; 
     std::wstring testName = context.marshal_as<std::wstring>(myTestContextInstance->TestName); 
     std::wstring dbgSend = L"tearing down " + testName; 
     ::OutputDebugString(dbgSend.c_str()); 
    } 

    [ClassInitialize] 
    static void testClassInitialize(Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ context) 
    { 

    } 

    [ClassCleanup] 
    static void testClassCleanup() 
    { 

    } 

}; 
İlgili konular