1

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

        }

        }

    };
}

ここに画像の説明を入力 Controller.h(抜粋):

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;
}
4

1 に答える 1