文件交换的选择

我们最好的用户提交

MockObject

肖恩本周的选择模拟对象通过保罗教堂司事

保罗为模拟提供了有用的模拟对象访问或缓慢的软件或硬件,而执行单元
测试。保罗的MockObject允许添加方法,和输出赋值(基于调用堆栈),和商店是如何用于后来的资格。
我也喜欢他的提供了一个示例,显示如何真正的软件的测试和模拟的模拟对象。

在R2017a, MATLAB的走了出来本地模拟框架。使用稍有不同,当您创建一个模拟得到两个对象,一个模拟实例和行为
为模拟对象。然后修改行为来优化模拟对象将如何表现。

我最近使用MATLAB模拟框架为目的的嘲笑一个数据库连接。这就是我的
做一个测试,但我是在一个单元测试类继承自matlab.mock.TestCase。我测试的LastUpdateTime属性的类更新正确当数据被添加到各种数据库中的表。

testCase = matlab.mock.TestCase.forInteractiveUse;进口matlab.mock.actions.AssignOutputs;进口matlab.mock.constraints.WasCalled;进口matlab.mock.actions.ThrowException;

模拟的数据库光标

%模拟数据库和游标[dbmock, dbbehavior] = createMock (testCase,“AddedMethods”,{“是”,“isopen”,“插入”,“更新”,“执行”});[cursmock, cursbehavior] = createMock (testCase,“AddedMethods”,{“关闭”,“获取”},“AddedProperties”,{“数据”});

定义游标的行为和数据库连接。注意,这些读英语句子。

%通过验证测试当(withAnyInputs (dbbehavior.isa)、AssignOutputs (“database.jdbc.connection”));当(withAnyInputs (dbbehavior.isopen) AssignOutputs(真));%返回游标模拟当数据库或执行光标/拿来。当(withAnyInputs (dbbehavior.exec) AssignOutputs (cursmock));当(withAnyInputs (cursbehavior.fetch) AssignOutputs (cursmock));

我们需要建立数据看起来像什么是必需的。

%合成输出,模拟多个热门的期望%的数据库。nowish = datetime (“现在”,“时区”,“美国/ New_York”);t1 =表([nowish;nowish) {“天气”;“能源”},“VariableNames”,{“lastModified”,“tableType”})t2 = t1;t2.lastModified (1) = t2.lastModified(1) +秒(1);%是天气t3 = t2;t3.lastModified (2) = t3.lastModified(2) +秒(3);%就能源%建立表插入在MySQL的格式要求c = {01 - 2007年5月——就是“,4854.40000000000,58岁的30;“01 - 2007年5月——00:05:00”,4802.30000000000,58.0833333333333,29.8333333333333;“01 - 2007年5月——00:10:00”,4740.30000000000,58.1666666666667,29.6666666666667;“01 - 2007年5月——00:15:00”,4700.34155844156,58.2500000000000,29.5000000000000;“01 - 2007年5月——00:20:00”,4681.77969924812,58.3333333333333,29.3333333333333;“01 - 2007年5月——00:25:00”,4648.99421487603,58.4166666666667,29.1666666666667;“01 - 2007年5月——00:30:00”,4633.70864197531,58.5000000000000,29};data = cell2table (c,“VariableNames”,{“时间”,“N_Y_C_”,“TemperatureF_KLGA”,“Dewpoint_KLGA”});数据。时间= datetime (data.Time);数据。KLGA =[数据。TemperatureF_KLGA data.Dewpoint_KLGA];数据。TemperatureF_KLGA = [];数据。Dewpoint_KLGA = []; data = table2timetable(data)
t1 = 2×2表lastModified tableType ____________________ _____ 06 - 10月- 2017 10:22:12‘天气’06 - 10月- 2017 10:22:12“能源”数据= 7×2时间表时间N_Y_C_ KLGA ____________________ ______ ___________ 01 - 58 - 2007就是4854.4 30 01 - 2007年5月- 01 - 2007年5月——00:10:00 00:05:00 4802.3 58.083 29.833 4740.3 58.167 29.667 01 - 2007年5月——00:15:00 01 - 2007年5月——00:20:00 4681.8 4700.3 58.25 29.5 58.333 29.333 01 - 4649年5月- 2007年00:25:00 58.417 29.167 01 - 2007年5月- 29 00:30:00 4633.7 - 58.5

设置输出的数据属性。错误三使用后。

当((cursbehavior.Data),然后(重复(1,AssignOutputs (t1)),然后(重复(1,AssignOutputs (t2)),然后(重复(1,AssignOutputs (t3)), ThrowException))));

运动系统。

%建立DatabaseHandlerdb = DatabaseHandler (dbmock);%增加能源和天气(数据库表)addData(数据库、数据);

资格数据库名为正确LastUpdateTime属性正确更新。为处理时间增加1秒的缓冲。

testCase.verifyThat (withAnyInputs (dbbehavior.insert ()), WasCalled (“WithCount”2));testCase.verifyThat (withAnyInputs (dbbehavior.update ()), WasCalled (“WithCount”2));firstlut = db.LastUpdateTime;nowish = datetime (“现在”,“时区”,“美国/ New_York”)+秒(1);testCase.verifyLessThan (table2array (firstlut) nowish);
交互式验证通过。交互式验证通过。交互式验证通过。
%添加天气(只是天气表在数据库)addData(数据库、数据(:{“KLGA”}));testCase.verifyThat (withAnyInputs (dbbehavior.insert ()), WasCalled (“WithCount”3));testCase.verifyThat (withAnyInputs (dbbehavior.update ()), WasCalled (“WithCount”3));secondlut = db.LastUpdateTime;testCase.verifyEqual (secondlut。能源、firstlut.Energy);testCase.verifyGreaterThan (secondlut。天气,firstlut.Weather);
交互式验证通过。交互式验证通过。交互式验证通过。交互式验证通过。
%添加只是能量(能量表在数据库)addData(数据库、数据(:{“N_Y_C_”}));testCase.verifyThat (withAnyInputs (dbbehavior.insert ()), WasCalled (“WithCount”4));testCase.verifyThat (withAnyInputs (dbbehavior.update ()), WasCalled (“WithCount”4));thirdlut = db.LastUpdateTime;testCase.verifyEqual (secondlut。天气,thirdlut.Weather);testCase.verifyGreaterThan (thirdlut。能源、secondlut.Energy);
交互式验证通过。交互式验证通过。交互式验证通过。交互式验证通过。

展望未来,我建议使用MATLAB测试框架为您的测试需求。他们的MATLAB
在过去的几年里真正成熟了很好。如果你需要设计为旧版本,那么保罗的MockObject当然可以帮助。

另一个博客的MATLAB模拟框架,看到这个博客在开发者的博客。

评论

两种模拟框架都尝试一下,让我们知道你的想法在这里或者离开评论保罗。

发表与MATLAB®R2017b

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。