%TestRunLogger Collect data (silently) from running test suite
% TestRunLogger is a subclass of TestRunMonitor uses to collect information
% from an executing test component (either a test case or a test suite).
% It maintains a record of event notifications received, as well as any test
% failures or test errors.
%
% TestRunLogger methods:
% testComponentStarted - Log test component started
% testComponentFinished - Log test component finished
% testCaseFailure - Log test case failure
% testCaseError - Log test case error
%
% TestRunLogger properties:
% Log - Cell array of test notification strings
% NumFailures - Number of test failures during execution
% NumErrors - Number of test errors during execution
% NumTestCases - Total number of test cases executed
% Faults - Struct array of test fault information
%
% See also CommandWindowTestRunDisplay, TestRunMonitor, TestSuite
% Steven L. Eddins
% Copyright 2008-2009 The MathWorks, Inc.
classdef TestRunLogger < TestRunMonitor
properties (SetAccess = protected)
%Log Cell array of test notification strings
% Test notification strings include 'TestRunStarted',
% 'TestRunFinished', 'TestComponentStarted', 'TestComponentFinished',
% 'TestCaseFailure', and 'TestCaseError'.
Log
%NumFailures Number of test failures during execution
NumFailures = 0
%NumErrors Number of test errors during execution
NumErrors = 0
%NumTestCases Total number of test cases executed
NumTestCases = 0
%Faults Struct array of test fault information
% Faults is a struct array with the fields Type, TestCase, and
% Exception. Type is either 'failure' or 'error'. TestCase is the
% test case object that triggered the fault. Exception is the
% MException object thrown during the fault.
Faults = struct('Type', {}, 'TestCase', {}, 'Exception', {});
end
properties (SetAccess = private, GetAccess = private)
InitialTestComponent = []
end
methods
function testComponentStarted(self, component)
if isempty(self.InitialTestComponent)
self.InitialTestComponent = component;
self.appendToLog('TestRunStarted');
end
self.appendToLog('TestComponentStarted');
if isa(component, 'TestCase')
self.NumTestCases = self.NumTestCases + 1;
end
end
function testComponentFinished(self, component, did_pass)
self.appendToLog('TestComponentFinished');
if isequal(component, self.InitialTestComponent)
self.appendToLog('TestRunFinished');
end
end
function testCaseFailure(self, test_case, failure_exception)
self.appendToLog('TestCaseFailure');
self.NumFailures = self.NumFailures + 1;
self.logFault('failure', test_case, ...
failure_exception);
end
function testCaseError(self, test_case, error_exception)
self.appendToLog('TestCaseError');
self.NumErrors = self.NumErrors + 1;
self.logFault('error', test_case, ...
error_exception);
end
end
methods (Access = private)
function appendToLog(self, item)
self.Log{end+1} = item;
end
function logFault(self, type, test_case, exception)
self.Faults(end + 1).Type = type;
self.Faults(end).TestCase = test_case;
self.Faults(end).Exception = exception;
end
end
end