%TestCase Class defining interface for test cases
% The TestCase class defines an individual test case.
%
% Normally a test writer will create their own test class that is a subclass
% of TestCase. Each instance of the TestCase subclass that gets created will
% be associated with a single test method.
%
% If a test fixture is needed, override the setUp() and tearDown() methods.
%
% TestSuite(subclass_name), where subclass_name is the name of a TestCase
% subclass, creates a test suite containing one TestCase instance per test
% method contained in the subclass.
%
% A simpler test-writing alternative to use subfunction-based M-file tests.
% See the MATLAB xUnit documentation.
%
% TestCase methods:
% TestCase - Constructor
% run - Execute the test case
%
% TestCase properties:
% Location - Location of M-file containing the test case
% Name - Name of test case
%
% See also TestComponent, TestSuite
% Steven L. Eddins
% Copyright 2008-2010 The MathWorks, Inc.
classdef TestCase < TestComponent
properties
MethodName
end
methods
function self = TestCase(testMethod)
%TestCase Constructor
% TestCase(methodName) constructs a TestCase object using the
% specified testMethod (a string).
self.MethodName = testMethod;
self.Name = testMethod;
self.Location = which(class(self));
end
function did_pass = run(self, monitor)
%run Execute the test case
% test_case.run(monitor) calls the TestCase object's setUp()
% method, then the test method, then the tearDown() method.
% observer is a TestRunObserver object. The testStarted(),
% testFailure(), testError(), and testFinished() methods of
% observer are called at the appropriate times. monitor is a
% TestRunMonitor object. Typically it is either a TestRunLogger
% subclass or a CommandWindowTestRunDisplay subclass.
%
% test_case.run() automatically uses a
% CommandWindowTestRunDisplay object in order to print test
% suite execution information to the Command Window.
if nargin < 2
monitor = CommandWindowTestRunDisplay();
end
did_pass = true;
monitor.testComponentStarted(self);
try
self.setUp();
f = str2func(self.MethodName);
try
% Call the test method.
f(self);
catch failureException
monitor.testCaseFailure(self, failureException);
did_pass = false;
end
self.tearDown();
catch errorException
monitor.testCaseError(self, errorException);
did_pass = false;
end
monitor.testComponentFinished(self, did_pass);
end
function num = numTestCases(self)
num = 1;
end
function print(self, numLeadingBlanks)
if nargin < 2
numLeadingBlanks = 0;
end
fprintf('%s%s\n', blanks(numLeadingBlanks), self.Name);
end
end
end