Main Content

공유 픽스처(Fixture)를 사용하여 테스트 작성하기

matlab.unittest.TestCase 클래스의 SharedTestFixtures 특성(Attribute)을 사용하여 전체 테스트 클래스에서 테스트 픽스처를 공유할 수 있습니다. 함께 실행되는 테스트 클래스 전체에 픽스처를 공유하면 테스트 프레임워크는 모든 테스트 클래스에 대해 픽스처를 한 번 설정하고 모든 테스트 클래스가 실행된 후 픽스처를 해제합니다. 각 클래스의 TestClassSetup methods 블록을 대신 사용하여 픽스처를 지정하는 경우 테스트 프레임워크는 각 테스트 클래스가 실행되기 전에 픽스처를 설정하고 각 테스트 클래스가 실행된 후 픽스처를 해제합니다.

이 예제에서는 테스트를 작성할 때 공유 픽스처를 사용하는 방법을 보여줍니다. 그리고 소스 코드가 포함된 폴더를 두 테스트 클래스 간의 경로에 추가하기 위해 픽스처를 공유하는 방법을 보여줍니다. 테스트 클래스는 이 픽스처를 사용하여 테스트에 필요한 소스 코드에 액세스합니다.

소스 코드와 테스트 코드를 현재 폴더에서 사용할 수 있도록 하려면 예제를 여십시오.

openExample("matlab/WriteTestsUsingSharedTestFixturesExample")

DocPolynomTest 클래스 정의

다음은 DocPolynomTest 클래스 정의 파일의 내용을 보여주는 코드입니다. 이 파일은 공유 픽스처를 사용하여, DocPolynom 클래스를 정의하는 폴더에 액세스합니다. DocPolynom 클래스에 대한 자세한 내용과 클래스 코드를 보려면 Representing Polynomials with Classes 항목을 참조하십시오.

classdef (SharedTestFixtures={ ...
        matlab.unittest.fixtures.PathFixture( ...
        fullfile("..","fixture_example_source"))}) ...
        DocPolynomTest < matlab.unittest.TestCase

    properties
        TextToDisplay = "Equation under test: "
    end

    methods (Test)
        function testConstructor(testCase)
            p = DocPolynom([1 0 1]);
            testCase.verifyClass(p,?DocPolynom)
        end

        function testAddition(testCase)
            p1 = DocPolynom([1 0 1]);
            p2 = DocPolynom([5 2]);
            actual = p1 + p2;
            expected = DocPolynom([1 5 3]);
            diagnostic = [testCase.TextToDisplay ...
                "(x^2 + 1) + (5*x + 2) = x^2 + 5*x + 3"];
            testCase.verifyEqual(actual,expected,diagnostic)
        end

        function testMultiplication(testCase)
            p1 = DocPolynom([1 0 3]);
            p2 = DocPolynom([5 2]);
            actual = p1 * p2;
            expected = DocPolynom([5 2 15 6]);
            diagnostic = [testCase.TextToDisplay ...
                "(x^2 + 3) * (5*x + 2) = 5*x^3 + 2*x^2 + 15*x + 6"];
            testCase.verifyEqual(actual,expected,diagnostic)
        end
    end
end

BankAccountTest 클래스 정의

다음은 BankAccountTest 클래스 정의 파일의 내용을 보여주는 코드입니다. 이 파일은 공유 픽스처를 사용하여, BankAccount 클래스를 정의하는 폴더에 액세스합니다. BankAccount 클래스에 대한 자세한 내용과 클래스 코드를 보려면 함께 작동하는 클래스 개발하기 항목을 참조하십시오.

classdef (SharedTestFixtures={ ...
        matlab.unittest.fixtures.PathFixture( ...
        fullfile("..","fixture_example_source"))}) ...
        BankAccountTest < matlab.unittest.TestCase

    methods (Test)
        function testConstructor(testCase)
            b = BankAccount(1234,100);
            testCase.verifyEqual(b.AccountNumber,1234, ...
                "Constructor must correctly set account number.")
            testCase.verifyEqual(b.AccountBalance,100, ...
                "Constructor must correctly set account balance.")
        end

        function testConstructorNotEnoughInputs(testCase)
            import matlab.unittest.constraints.Throws
            testCase.verifyThat(@()BankAccount,Throws("MATLAB:minrhs"))
        end

        function testDeposit(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

테스트 실행하기

현재 폴더와 하위 폴더의 테스트를 실행합니다. 테스트 프레임워크는 공유 테스트 픽스처를 설정하고, BankAccountTest 클래스 및 DocPolynomTest 클래스의 테스트를 실행하며, 테스트 실행 후 픽스처를 해제합니다. 이 예제에서 모든 테스트가 통과했습니다.

runtests("IncludeSubfolders",true);
Setting up PathFixture
Done setting up PathFixture: Added 'C:\work\WriteTestsUsingSharedTestFixturesExample\fixture_example_source' to the path.
__________

Running BankAccountTest
.....
Done BankAccountTest
__________

Running DocPolynomTest
...
Done DocPolynomTest
__________

Tearing down PathFixture
Done tearing down PathFixture: Restored the path to its original state.
__________

참고 항목

| |

관련 항목