Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

verifyClass

クラス: matlab.unittest.qualifications.Verifiable
パッケージ: matlab.unittest.qualifications

指定した値の正確なクラスを検証する

構文

verifyClass(verifiable,actual,className)
verifyClass(verifiable,actual,metaClass)
verifyClass(___,diagnostic)

説明

verifyClass(verifiable,actual,className) は、actual が MATLAB® 値であり、そのクラスが className で指定されていることを検証します。

verifyClass(verifiable,actual,metaClass) は、actual が MATLAB 値であり、そのクラスが meta.class インスタンス metaClass で指定されていることを検証します。インスタンスは、クラスと正確に一致しなければなりません。verifyInstanceOf を使用して、クラス階層に含まれることを検証します。

verifyClass(___,diagnostic) は、さらに diagnostic の診断情報を検定に関連付けます。テスト フレームワークでは、テスト ランナーの構成に応じて検定にパスしたときか失敗したときに診断を表示する場合があります。既定では、フレームワークは検定に失敗したときにのみ診断を表示します。この既定の動作はテスト ランナーをカスタマイズしてオーバーライドできます。たとえば、失敗したイベントとパスしたイベントの両方の診断を表示するには、DiagnosticsOutputPlugin インスタンスを使用します

入力引数

verifiable

この matlab.unittest.TestCase インスタンスは、テストを実行しているフレームワークとの組み合わせで検証が成功か失敗かを判定するために使用します。

actual

テストする値。

className

クラスの名前。文字ベクトルとして指定します。

metaClass

meta.class のインスタンス。

diagnostic

検定に関連する診断情報。次のいずれかとして指定します。

  • string 配列

  • 文字配列

  • 関数ハンドル

  • matlab.unittest.diagnostics.Diagnostic オブジェクト

診断値は、非スカラー値になることがあります。詳細については、matlab.unittest.diagnostics.Diagnostic を参照してください。

すべて展開する

これらの対話型テストでは、数 5 のクラスを検証します。

テスト用に TestCase オブジェクトと値を作成します。

testCase = matlab.unittest.TestCase.forInteractiveUse;
actvalue = 5;

actvalue のクラスが double であることを検証します。

verifyClass(testCase, actvalue, 'double');
Interactive verification passed.

actvalue のクラスが char であることを検証します。

verifyClass(testCase, actvalue, 'char');
Interactive verification failed.

---------------------
Framework Diagnostic:
---------------------
verifyClass failed.
--> The value's class is incorrect.
    
    Actual Class:
        double
    Expected Class:
        char

Actual double:
         5

テストが失敗しました。

これらの対話型テストは、meta.class インスタンス ?function_handle として指定された関数ハンドルを検証します。

TestCase オブジェクトを作成します。

testCase = matlab.unittest.TestCase.forInteractiveUse;

関数ハンドルを作成します。

fh = @sin;
verifyClass(testCase, fh, ?function_handle);
Interactive verification passed.

関数名をテストします。

fh = 'sin';
verifyClass(testCase, fh, ?function_handle);
Interactive verification failed.

---------------------
Framework Diagnostic:
---------------------
verifyClass failed.
--> The value's class is incorrect.
    
    Actual Class:
        char
    Expected Class:
        function_handle

Actual char:
    sin

テストが失敗しました。

派生クラスが基本クラスと同じクラスでないことを検証します。

クラス BaseExample を作成します。

classdef BaseExample
end

派生クラス DerivedExample を作成します。

classdef DerivedExample < BaseExample
end

クラスが同じでないことを検証します。

testCase = matlab.unittest.TestCase.forInteractiveUse;
verifyClass(testCase, DerivedExample(), ?BaseExample);
Interactive verification failed.

---------------------
Framework Diagnostic:
---------------------
verifyClass failed.
--> The value's class is incorrect.
    
    Actual Class:
        DerivedExample
    Expected Class:
        BaseExample

Actual DerivedExample:
      DerivedExample with no properties.

テストが失敗しました。

verifyClass を使って、関数 add5double 値を返すことをテストします。

ユニット テスト用の関数

type add5.m
function res = add5(x)
% ADD5 Increment input by 5.
if ~isa(x,'numeric')
    error('add5:InputMustBeNumeric','Input must be numeric.')
end
res = x + 5;
end

TestCase クラス。このクラスにはテスト メソッドが含まれます。

type Add5Test.m
classdef Add5Test < matlab.unittest.TestCase
    methods (Test)
        function testDoubleOut(testCase)
            actOutput = add5(1);
            testCase.verifyClass(actOutput,'double')
        end
        function testNonNumericInput(testCase)
            testCase.verifyError(@()add5('0'),'add5:InputMustBeNumeric')
        end
    end
end

Add5Test クラス ファイルからテスト スイートを作成します。

suite = matlab.unittest.TestSuite.fromFile('Add5Test.m')
suite = 
  1x2 Test array with properties:

    Name
    ProcedureName
    TestClass
    BaseFolder
    Parameterization
    SharedTestFixtures
    Tags

Tests Include:
   0 Parameterizations, 0 Shared Test Fixture Classes, 0 Tags.

テストを実行します。

result = run(suite);
Running Add5Test
..
Done Add5Test
__________

ヒント

  • このメソッドは、以下のメソッドと機能的に等価です。

    import matlab.unittest.constraints.IsOfClass;
    verifiable.verifyThat(actual, IsOfClass(className));
    verifiable.verifyThat(actual, IsOfClass(metaClass));
    

    verifyThat を介して IsOfClass 制約を直接使用した場合、使用できる機能の数が増えます。

  • 検証検定を使用して、例外をスローせずにエラーを生成して記録します。検証では例外がスローされないため、すべてのテスト内容は検証エラーが発生しても最後まで実行されます。通常の場合、検証はテストを早期終了する必要がないため、ユニット テストの主な検定となります。前提条件の違反や不適切なテスト設定がないかどうかをテストするには、他の検定タイプを使用します。あるいは、次のようにします。

    • テスト環境がテスト エラーを回避するために必要な前提条件を満たしていることを確認するには、仮定検定を使用してください。仮定エラーが発生するとテストのフィルター処理が行われ、テスト フレームワークによってテストが Incomplete としてマークされます。詳細については、matlab.unittest.qualifications.Assumable を参照してください。

    • エラー条件によって現在のテスト内容の残りが無効になっても、それ以降のテスト メソッドは正しく実行される場合、アサーション検定を使用してください。アサーション地点におけるエラーによって、現在のテスト メソッドが失敗し不完全となります。詳細については、matlab.unittest.qualifications.Assertable を参照してください。

    • エラーが発生した場合にテスト セッションを中止するには、致命的なアサーション検定を使用してください。これらの検定は、エラー モードがあまりに根本的なものであり、テストを続行する意義がない場合に役立ちます。また、フィクスチャの破棄で MATLAB の状態が正しく復元されず、テストを中止して新しいセッションを開始する方が望ましい場合にも有益です。詳細については、matlab.unittest.qualifications.FatalAssertable を参照してください。

R2013a で導入