Main Content

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

クラスを使用するセットアップ コードと破棄コードの記述

テスト フィクスチャ

"テスト フィクスチャ" とは、システムのテスト前の状態を設定するセットアップ コードと、テストの実行後にそれを元の状態に戻す破棄コードです。セットアップ メソッドおよび破棄メソッドは、TestCase クラスで以下のメソッドの属性により定義されます。

  • TestMethodSetupTestMethodTeardown メソッドは、それぞれのテスト メソッドの前と後に実行します。

  • TestClassSetupTestClassTeardown メソッドは、テスト ケースのすべてのテスト メソッドの前と後に実行します。

テスト フレームワークはスーパークラスのメソッド TestMethodSetupTestClassSetup がサブクラスのメソッドの前に実行されるようにします。

テスト作成者には、TestMethodTeardown および TestClassTeardown ブロック内の対応する破棄メソッドを実装する代わりに、addTeardown メソッドを使用して TestMethodSetup および TestClassSetup 内からすべての破棄アクティビティを行うことをお勧めします。これにより、破棄が設定の逆の順番で実行されるようになり、テスト内容が例外安全であることを確認されます。

メソッド レベルのセットアップ コードをもつテスト ケース

次のテスト ケース FigurePropertiesTest には、メソッド レベルのセットアップ コードが含まれます。TestMethodSetup メソッドはそれぞれのテストの実行前に Figure を作成し、TestMethodTeardown は後でその Figure を閉じます。前述のとおり、addTeardown メソッドにより破棄アクティビティを定義するようにすべきです。ただし、この例では説明を分かりやすくするため TestMethodTeardown ブロックの実装方法を示します。

classdef FigurePropertiesTest < matlab.unittest.TestCase
    
    properties
        TestFigure
    end
    
    methods(TestMethodSetup)
        function createFigure(testCase)
            testCase.TestFigure = figure;
        end
    end
    
    methods(TestMethodTeardown)
        function closeFigure(testCase)
            close(testCase.TestFigure)
        end
    end
    
    methods(Test)
        function defaultCurrentPoint(testCase)
            cp = testCase.TestFigure.CurrentPoint;
            testCase.verifyEqual(cp,[0 0], ...
                'Default current point is incorrect')
        end
        
        function defaultCurrentObject(testCase)
            import matlab.unittest.constraints.IsEmpty
            co = testCase.TestFigure.CurrentObject;
            testCase.verifyThat(co,IsEmpty, ...
                'Default current object should be empty')
        end
    end
    
end

クラス レベルのセットアップ コードをもつテスト ケース

次のテスト ケース BankAccountTest には、クラス レベルのセットアップ コードが含まれます。

クラスの開発 — 一般的なワークフローで説明されている BankAccount クラスの例をテストする BankAccountTest をセットアップするには、TestClassSetup メソッド addBankAccountClassToPath を追加します。このメソッドにより、パスが BankAccount の例のファイルに追加されます。通常は、PathFixture を使用してパスを設定します。この例では、分かりやすくするため設定および破棄のアクティビティを手動で行います。

classdef BankAccountTest < matlab.unittest.TestCase
    % Tests the BankAccount class
    
    methods(TestClassSetup)
        function addBankAccountClassToPath(testCase)
            p = path;
            testCase.addTeardown(@path,p)
            addpath(fullfile(matlabroot,'help','techdoc','matlab_oop', ...
                'examples'))
        end
    end
    
    methods(Test)
        function testConstructor(testCase)
            b = BankAccount(1234,100);
            testCase.verifyEqual(b.AccountNumber,1234, ...
                'Constructor failed to correctly set account number')
            testCase.verifyEqual(b.AccountBalance,100, ...
                'Constructor failed to correctly set account balance')
        end
        
        function testConstructorNotEnoughInputs(testCase)
            import matlab.unittest.constraints.Throws
            testCase.verifyThat(@()BankAccount, ...
                Throws('MATLAB:minrhs'))
        end
        
        function testDesposit(testCase)
            b = BankAccount(1234,100);
            b.deposit(25)
            testCase.verifyEqual(b.AccountBalance,125)
        end
        
        function testWithdraw(testCase)
            b = BankAccount(1234,100);
            b.withdraw(25)
            testCase.verifyEqual(b.AccountBalance,75)
        end
        
        function testNotifyInsufficientFunds(testCase)
            callbackExecuted = false;
            function testCallback(~,~)
                callbackExecuted = true;
            end
            b = BankAccount(1234,100);
            b.addlistener('InsufficientFunds',@testCallback);
            b.withdraw(50)
            testCase.assertFalse(callbackExecuted, ...
                'The callback should not have executed yet')
            b.withdraw(60)
            testCase.verifyTrue(callbackExecuted, ...
                'The listener callback should have fired')
        end
    end
    
end

参考

|

関連するトピック