创建高级定制夹具
这个例子展示了如何创建一个定制夹具设置一个环境变量。在测试之前,这个夹具将保存当前用户名
变量。
创建UserNameEnvironmentVariableFixture类定义
在一个文件在您的工作目录中,创建一个新类,UserNameEnvironmentVariableFixture
继承的matlab.unittest.fixtures.Fixture
类。既然你想通过一个用户名,创建一个用户名
属性之间传递数据的方法。
classdefUserNameEnvironmentVariableFixture <…matlab.unittest.fixtures.Fixture属性(SetAccess =私人)用户名结束
夹具定义构造函数
在方法
块的UserNameEnvironmentVariableFixture.m
文件,创建一个构造函数方法,验证输入和定义SetupDescription
。构造函数接受一个特征向量和设置固定的吗用户名
财产。
方法函数夹具= UserNameEnvironmentVariableFixture(名字)validateattributes(名字,{“字符”},{“行”},”,“用户名”)固定。用户名= name; fixture.SetupDescription = sprintf(…“设置用户环境变量“% s”。,…fixture.UserName);结束
实现设置方法
子类的夹具
类必须实现设置
方法。使用此方法来保存原始用户名
变量。这种方法还定义了TeardownDescription
和寄存器设置的拆卸任务用户名
测试后的初始状态。
定义设置
方法在方法
块的UserNameEnvironmentVariableFixture.m
文件。
函数设置(夹具)originalUserName = getenv (“用户名”);fixture.assertNotEmpty (originalUserName…“现有的用户名必须定义环境变量。)fixture.addTeardown (@setenv“用户名”originalUserName)夹具。TeardownDescription= sprintf(…“恢复用户名“% s”环境变量。,…originalUserName);setenv (“用户名”fixture.UserName)结束结束
实现isCompatible方法
类,来自夹具
必须实现isCompatible
如果构造函数是可配置的方法。因为你可以配置用户名
通过构造函数属性,UserNameEnvironmentVariableFixture
必须实现isCompatible
。
的isCompatible
方法被调用同一个类的两个实例。在这种情况下,它被称为的两个实例UserNameEnvironmentVariableFixture
。测试框架考虑兼容的,如果他们两个实例用户名
属性是相等的。
在一个新的方法
块内UserNameEnvironmentVariableFixture.m
,定义一个isCompatible
方法返回逻辑1
(真正的
)或逻辑0
(假
)。
方法(访问=保护)函数bool = isCompatible(夹具,其他)bool = strcmp(夹具。用户名、other.UserName);结束结束
夹具类定义的总结
下面是完整的内容UserNameEnvironmentVariableFixture.m
。
classdefUserNameEnvironmentVariableFixture <…matlab.unittest.fixtures.Fixture属性(SetAccess =私人)用户名结束方法函数夹具= UserNameEnvironmentVariableFixture(名字)validateattributes(名字,{“字符”},{“行”},”,“用户名”)固定。用户名= name; fixture.SetupDescription = sprintf(…“设置用户环境变量“% s”。,…fixture.UserName);结束函数设置(夹具)originalUserName = getenv (“用户名”);fixture.assertNotEmpty (originalUserName…“现有的用户名必须定义环境变量。)fixture.addTeardown (@setenv“用户名”originalUserName)夹具。TeardownDescription= sprintf(…“恢复用户名“% s”环境变量。,…originalUserName);setenv (“用户名”fixture.UserName)结束结束方法(访问=保护)函数bool = isCompatible(夹具,其他)bool = strcmp(夹具。用户名、other.UserName);结束结束结束
定制夹具适用于单一的测试类
在一个文件在您的工作目录中,创建以下测试类,ExampleTest.m
。
classdefExampleTest < matlab.unittest.TestCase方法(TestMethodSetup)函数mySetup (testCase) testCase.applyFixture (…UserNameEnvironmentVariableFixture (“大卫”));结束结束方法(测试)函数t1(~)流(1,当前用户名:“% s”getenv (“用户名”))结束结束结束
这个测试使用UserNameEnvironmentVariableFixture
为每个测试ExampleTest
类。
在命令提示符处运行测试。
运行(ExampleTest);
运行ExampleTest当前用户名:“大卫”。完成ExampleTest __________
应用定制夹具作为共享夹具
在您的工作目录中,创建三个测试类使用一个共享的夹具。使用共享设备允许的UserNameEnvironmentVariableFixture
在共享类。
创建testA.m
如下。
classdef(SharedTestFixtures = {…UserNameEnvironmentVariableFixture (“大卫”)})…外种皮< matlab.unittest.TestCase方法(测试)函数t1(~)流(1,当前用户名:“% s”getenv (“用户名”))结束结束结束
创建testB.m
如下。
classdef(SharedTestFixtures = {…UserNameEnvironmentVariableFixture (“安迪”)})…的< matlab.unittest.TestCase方法(测试)函数t1(~)流(1,当前用户名:“% s”getenv (“用户名”))结束结束结束
创建testC.m
如下。
classdef(SharedTestFixtures = {…UserNameEnvironmentVariableFixture (“安迪”)})…testC < matlab.unittest.TestCase方法(测试)函数t1(~)流(1,当前用户名:“% s”getenv (“用户名”))结束结束结束
在命令提示符下,运行测试。
runtests ({“甲壳”,“的”,“testC”});
设置UserNameEnvironmentVariableFixture完成设置UserNameEnvironmentVariableFixture:将用户环境变量设置为“大卫”。__________运行甲壳当前用户名:“大卫”。做外种皮__________拆除UserNameEnvironmentVariableFixture完成拆除UserNameEnvironmentVariableFixture:恢复用户名“金”环境变量。__________设置UserNameEnvironmentVariableFixture完成设置UserNameEnvironmentVariableFixture:将用户环境变量设置为“安迪”。__________运行的当前用户名:“安迪”。做的__________运行testC当前用户名:“安迪”。完成testC __________拆除UserNameEnvironmentVariableFixture完成拆除UserNameEnvironmentVariableFixture:恢复用户名“金”环境变量。__________
如果他们记得设备兼容用户名
属性匹配。的测试外种皮
和的
使用不兼容的共享设备,因为“大卫”
不等于“安迪”
。因此,框架调用夹具拆卸
和设置
方法调用之间外种皮
和的
。然而,共享测试夹具testC
兼容的夹具吗的
,所以框架不重复夹具拆卸和设置testC
。
替代方法调用addTeardown在设置方法
另一种方法来使用addTeardown
方法在设置
方法是实现一个单独的拆卸
方法。而不是设置
上述方法,实现以下设置
和拆卸
方法在UserNameEnvironmentVariableFixture.m
。
备用
UserNameEnvironmentVariableFixture
类定义
的设置
不包含调用方法addTeardown
或一个定义TeardownDescription
。这些任务是降级拆卸
方法。alternative类定义包含一个额外的属性,OriginalUser
,它允许之间的信息传递方法。
另请参阅
matlab.unittest.fixtures.Fixture