我正在编写一个机器人控制器类Controller,其中我为 4 个可控电机中的每一个使用一个 struct Axis。
对于每个测试,我想重置所有内容,因此我在类中创建了一个指针,在每个测试方法之前将其更改为新的 Controller。初始化在 TEST_METHOD_INITIALIZE 中工作正常,但是一旦调用任何 TEST_METHOD,程序似乎会重置轴指针。
谢谢你的帮助!
编辑:经过进一步分析,我得出的理论是,初始化的 Axis 对象 Axis init_mx 在方法完成后被删除。
Edit2:我认为这是一个稍微复杂一点的问题:C++ 中指向局部变量的指针 不过,我没有找到一种方法来为每个方法重置 Axis 变量,而无需实际重置其中的每个变量。
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
...
namespace UnitTest
{
TEST_CLASS(UnitTestController)
{
public:
Controller* controller;
struct Axis *mx, *my, *mz, *mg;
TEST_METHOD_INITIALIZE(methodName)
{
Axis init_mx(50), init_my(50), init_mz(50), init_mg(5);
mx = &init_mx;
my = &init_my;
mz = &init_mz;
mg = &init_mg;
Controller init_controller(mx, my, mz, mg);
controller = &init_controller;
}
...
TEST_METHOD(id_3_next_mode)
{
mx->position = 5;
controller->getAxisPositionMx();
//Axis in pointers got reset and therefore have no pointers to the
//provided structs from TEST_METHOD_INITIALIZE
}
}
};
}
private:
struct Axis *mx, *my, *mz, *mg;
Controller.cpp(摘录)
Controller::Controller(Axis *mx_in, Axis *my_in, Axis *mz_in, Axis *mg_in)
{
mx = mx_in;
my = my_in;
mz = mz_in;
mg = mg_in;
}