主要内容

创建高级定制夹具

这个例子展示了如何创建一个定制夹具设置一个环境变量。在测试之前,这个夹具将保存当前用户名变量。

创建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,它允许之间的信息传递方法。

另请参阅

相关的话题