gpt4 book ai didi

c++ - 在托管 C++ 测试中使用 TestContext.TestName

转载 作者:太空宇宙 更新时间:2023-11-04 13:18:52 26 4
gpt4 key购买 nike

如何在托管的 VS C++ 测试代码中使用 TestContext 类的 TestName 成员将测试方法的名称自动输出到调试控制台?

我能找到的每个示例都是用 C# 编写的,但我无法将其正确翻译成 C++。在这里,我尝试通过在静态 ClassInitialize 方法期间捕获 TestContext 对象来执行此操作,但这不起作用。

#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()
{

}



};

输出

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

期望的输出

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

最佳答案

一位同事为我回答了这个问题。如果您创建名为 TestInstance 的公共(public)成员属性,框架将自动为您设置测试上下文。这是适合我的确切语法。

#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()
{

}

};

关于c++ - 在托管 C++ 测试中使用 TestContext.TestName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36090726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com