创建自定义布尔约束
此示例演示如何创建自定义布尔约束,以确定给定值是否与期望值具有相同的大小。
在当前文件夹中的一个文件中,创建一个名为HasSameSizeAs
这源于matlab.unittest.constraints.BooleanConstraint
类。类构造函数接受一个期望值,其大小与实际值的大小进行比较。期望值存储在ValueWithExpectedSize
财产。建议的做法是使BooleanConstraint
实现是不可变的,所以设置这个属性SetAccess
属性来不可变的
.
classdefHasSameSizeAs < matlab.unittest.constraints.BooleanConstraint属性(SetAccess = immutable) ValueWithExpectedSize结束方法函数约束= HasSameSizeAs(value)约束。ValueWithExpectedSize = value;结束结束结束
在一个方法
块与私人
访问,定义一个帮助器方法sizeMatchesExpected
这决定了实际值和期望值是否具有相同的大小。此方法由其他约束方法调用。
方法(Access = private)函数bool = sizeematchesexpected (constraint,actual) bool = isequal(size(actual),size(constraint. valuewithexpectedsize));结束结束
的matlab.unittest.constraints.BooleanConstraint
类的子类matlab.unittest.constraints.Constraint
类。类派生的类BooleanConstraint
类的方法约束
类。在一个方法
块,覆盖satisfiedBy
而且getDiagnosticFor
方法。的satisfiedBy
实现必须包含比较逻辑并返回逻辑值。的getDiagnosticFor
实现必须根据约束计算实际值,并提供诊断
对象。在这个例子中,getDiagnosticFor
返回一个StringDiagnostic
对象。
方法函数bool = satisedby (constraint,actual) bool = constraint. sizematchesexpected (actual);结束函数diag = getDiagnosticFor(constraint,actual)导入matlab.unittest.diagnostics.StringDiagnostic如果constraint.sizeMatchesExpected(actual) diag = StringDiagnostic(“HasSameSizeAs过去了。”);其他的diag = StringDiagnostic(sprintf(...“HasSameSizeAs失败了。\nActual Size: [%s]\nExpectedSize: [%s]',...int2str(大小(实际)),...int2str(大小(constraint.ValueWithExpectedSize))));结束结束结束
派生自BooleanConstraint
必须实现getNegativeDiagnosticFor
方法。此方法必须提供诊断
当约束为负数时,对象。
覆盖getNegativeDiagnosticFor
在一个方法
块与受保护的
访问。
方法(访问=受保护)函数diag = getNegativeDiagnosticFor(constraint,actual) importmatlab.unittest.diagnostics.StringDiagnostic如果constraint.sizeMatchesExpected(actual) diag = StringDiagnostic(sprintf(...['Negated hassamesizas failed。\nSize [%s] '...“实际价值和预期价值相同”...“但不应该这样。”), int2str(大小(实际))));其他的diag = StringDiagnostic(“否定了hassamesizas通过。”);结束结束结束
作为实现所需方法的交换,约束继承相应的方法而且
,或
,不
重载,所以它可以与其他组合BooleanConstraint
对象或否定。
HasSameSizeAs类定义
的完整代码HasSameSizeAs
类。
classdefHasSameSizeAs < matlab.unittest.constraints.BooleanConstraint属性(SetAccess = immutable) ValueWithExpectedSize结束方法函数约束= HasSameSizeAs(value)约束。ValueWithExpectedSize = value;结束函数bool = satisedby (constraint,actual) bool = constraint. sizematchesexpected (actual);结束函数diag = getDiagnosticFor(constraint,actual)导入matlab.unittest.diagnostics.StringDiagnostic如果constraint.sizeMatchesExpected(actual) diag = StringDiagnostic(“HasSameSizeAs过去了。”);其他的diag = StringDiagnostic(sprintf(...“HasSameSizeAs失败了。\nActual Size: [%s]\nExpectedSize: [%s]',...int2str(大小(实际)),...int2str(大小(constraint.ValueWithExpectedSize))));结束结束结束方法(访问=受保护)函数diag = getNegativeDiagnosticFor(constraint,actual) importmatlab.unittest.diagnostics.StringDiagnostic如果constraint.sizeMatchesExpected(actual) diag = StringDiagnostic(sprintf(...['Negated hassamesizas failed。\nSize [%s] '...“实际价值和预期价值相同”...“但不应该这样。”), int2str(大小(实际))));其他的diag = StringDiagnostic(“否定了hassamesizas通过。”);结束结束结束方法(Access = private)函数bool = sizeematchesexpected (constraint,actual) bool = isequal(size(actual),size(constraint. valuewithexpectedsize));结束结束结束
预期尺寸试验
在命令提示符下,为交互测试创建一个测试用例。
进口matlab.unittest.TestCase进口matlab.unittest.constraints.HasLengthtestCase = testCase . forinteractiveuse;
测试一个通过的案例。测试通过是因为其中一个或
条件下,HasLength (5)
,是真的。
testCase.verifyThat(zeros(5),HasLength(5) | ~HasSameSizeAs(repmat(1,5)))
验证通过。
测试一个失败的案例。测试失败是因为其中一个而且
条件下,~ HasSameSizeAs (repmat(1、5))
,是假的。
testCase.verifyThat(zeros(5),HasLength(5) & ~HasSameSizeAs(repmat(1,5)))
验证失败。--------------------- 框架的诊断 : --------------------- AndConstraint失败了。——> +[第一个条件]:| HasLength已通过。| |实际值:| 0 0 0 0 0 | 0 0 0 0 0 | 0 0 0 0 0 | 0 0 0 0 0 0 0 | 0 0 0 0 0 0 |期望长度:| 5——> AND +[第二个条件]:| Negated HasSameSizeAs failed。|实际值和期望值的大小[5 5]相同,但不应该相同。-+---------------------
另请参阅
matlab.unittest.constraints.BooleanConstraint
|matlab.unittest.constraints.Constraint
|satisfiedBy
|getDiagnosticFor
|getNegativeDiagnosticFor
|matlab.unittest.diagnostics.StringDiagnostic
|matlab.unittest.diagnostics.Diagnostic