3

私が取り組んでいるプログラムは、いくつかの可能な値のセットしか持てないオブジェクトを含む計算を実行します。これらのパラメータ セットは、カタログ ファイルから読み取られます。

例として、オブジェクトが車を表し、カタログに各モデルの値セット {id: (name, color, power, etc)} が含まれているとします。ただし、これらのカタログは多数あります。

Matlab の unittest パッケージを使用して、カタログに記載されているプロパティの組み合わせのいずれかで計算が失敗するかどうかをテストします。このパッケージを使用したいのは、失敗したエントリの優れたリストを提供するからです。(ハードコードされた) カタログ ファイルのすべての ID のセル配列を生成し、それをパラメーター化されたテストに使用するテストが既にあります。

とりあえず、カタログ ファイルごとに新しいクラスを作成する必要があります。カタログ ファイル名をクラス パラメーターとして設定し、その中のエントリをメソッド パラメーター (すべてのクラス パラメーターに対して生成される) として設定したいのですが、現在のクラス パラメーターをローカル メソッドに渡して作成する方法が見つかりません。メソッドのパラメーター リスト。

どうすればこれを機能させることができますか?

重要な場合: 私は Matlab 2014a、2015b、または 2016a を使用しています。

4

1 に答える 1

1

いくつかの考えがあります。

  1. TestParameters は定数プロパティとして定義されており、各 ClassSetupParameter 値を変更できないため、これは現在実行できません。

  2. ただし、カタログごとに個別のクラスを作成することは、悪い考えではないように思えます。そのワークフローのフォールオーバーはどこにありますか? 必要に応じて、コンテンツとカタログ ファイルの抽象プロパティを含むテスト基本クラスを使用して、これらのファイル間でコードを共有することもできます。

    classdef CatalogueTest < matlab.unittest.TestCase
        properties(Abstract)
            Catalogue;
        end
        properties(Abstract, TestParameter)
             catalogueValue
        end
    
        methods(Static) 
            function cellOfValues = getValuesFor(catalog)
                % Takes a catalog and returns the values applicable to 
                % that catalog.
            end
        end
    
        methods(Test)
            function testSomething(testCase, catalogueValue)
                % do stuff with the catalogue value
            end
            function testAnotherThing(testCase, catalogueValue)
                % do more stuff with the catalogue value
            end
        end
    
    end
    
    
    
    classdef CarModel1Test < CatalogueTest
    
        properties
            % If the catalog is not needed elsewhere in the test then
            % maybe the Catalogue abstract property is not needed and you
            % only need the abstract TestParameter.
            Catalogue = 'Model1';
        end
        properties(TestParameter)
             % Note call a function that lives next to these tests
             catalogueValue = CatalogueTest.getValuesFor('Model1');
        end
    end
    

    それはあなたがやろうとしていることでうまくいきますか?

  3. メソッドのパラメーターと言うとき、「MethodSetupParameters」ではなく「TestParameters」を意味していると思いますか? 私があなたの質問を正しく読んでいる場合、これがあなたのケースに当てはまるかどうかはわかりませんが、クラスに別のプロパティを作成して Test の値を保持することにより、ClassSetupParameters/MethodSetupParameters からテストメソッドにデータを取得できることを述べたいと思います[メソッド|クラス] セットアップし、テスト メソッド内でこれらの値を参照します。そのようです:

    classdef TestMethodUsesSetupParamsTest < matlab.unittest.TestCase
        properties(ClassSetupParameter)
            classParam = {'data'};
        end
        properties
            ThisClassParam
        end
    
        methods(TestClassSetup)
            function storeClassSetupParam(testCase, classParam)
                testCase.ThisClassParam = classParam;       
            end
        end
    
        methods(Test)
            function testSomethingAgainstClassParam(testCase)
                testCase.ThisClassParam
            end
        end
    
    end
    

    もちろん、この例では TestParameter を使用する必要がありますが、これが役立つ場合もあります。ここで役立つかどうかはわかりません。

于 2016-03-03T17:39:13.047 に答える