공유 픽스처(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. __________
참고 항목
matlab.unittest.TestCase
| matlab.unittest.fixtures.Fixture
| matlab.unittest.fixtures.PathFixture