This example shows how to create a custom constraint that determines if a given value is the same size as an expected value.
In a file in your working folder, create a HasSameSizeAs.m
.
The constructor accepts a value to compare to the actual size. This
value is stored within the ValueWithExpectedSize
property.
Since, it is recommended that Constraint
implementations
are immutable, set the property SetAccess=immutable
.
classdef HasSameSizeAs < matlab.unittest.constraints.Constraint properties(SetAccess=immutable) ValueWithExpectedSize end methods function constraint = HasSameSizeAs(value) constraint.ValueWithExpectedSize = value; end end end
Classes that derive from Constraint
must
implement the satisfiedBy
method. This method must
contain the comparison logic and return a boolean
value.
Include the satisfiedBy
method in the methods
block
in HasSameSizeAs.m
.
function bool = satisfiedBy(constraint, actual) bool = isequal(size(actual), size(constraint.ValueWithExpectedSize)); end
If the actual size and expected size are equal, this method
returns true
.
Classes deriving from Constraint
must
implement the getDiagnosticFor
method. This method
must evaluate the actual value against the constraint and provide
a Diagnostic
object. In this example, getDiagnosticFor
returns
a StringDiagnostic
. Include the getDiagnosticFor
method
in the methods
block in HasSameSizeAs.m
.
function diag = getDiagnosticFor(constraint, actual) import matlab.unittest.diagnostics.StringDiagnostic if constraint.satisfiedBy(actual) diag = StringDiagnostic('HasSameSizeAs passed.'); else diag = StringDiagnostic(sprintf(... 'HasSameSizeAs failed.\nActual Size: [%s]\nExpectedSize: [%s]',... int2str(size(actual)),... int2str(size(constraint.ValueWithExpectedSize)))); end end
HasSameSizeAs Class Definition Summary
At the command prompt, create a test case for interactive testing.
import matlab.unittest.TestCase
testCase = TestCase.forInteractiveUse;
Test a passing case.
testCase.verifyThat(zeros(5), HasSameSizeAs(repmat(1,5)))
Interactive verification passed.
Test a failing case.
testCase.verifyThat(zeros(5), HasSameSizeAs(ones(1,5)))
Interactive verification failed. --------------------- Framework Diagnostic: --------------------- HasSameSizeAs failed. Actual Size: [5 5] ExpectedSize: [1 5]
matlab.unittest.constraints.Constraint