欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

MQLUnit - 复杂 EA 交易的微型单元测试框架 - MetaTrader 5 脚本

author emer | 259 人阅读 | 0 人评论 |

MQLUnit - Tiny Unit Tests Framework For Complex Expert Advisors - script for MetaTrader 5

MQLUnit - Tiny Unit Tests Framework For Complex Expert Advisors - script for MetaTrader 5

作为 20 年的 Java 开发人员,我习惯于使用测试驱动开发技术编写更复杂的程序。当我开始编写更复杂的 EA 交易时,我缺少一个支持我在 MQL5 中进行单元测试的可靠框架。因此,我开发了自己的简单而直接的解决方案,MQLUnit 诞生了。它简化了测试编写,使其可以集成到每个人的开发过程中。我建议您在开发更复杂的 MQL5 程序后立即使用它。 “更复杂”到底是什么意思?每当您的代码超过一定数量的代码行时,您通常会创建组件来应对复杂性。当您有多个组件时,是时候认真考虑一个好的测试策略来确保代码的质量了。

下载 zip 文件并将其导出到您的 MQL5/Include 目录或直接导出到您的 EA 项目中。 MQLUnit 由一些您在编写单元测试时可以使用的类组成。 MQLUnit 的用户创建一个实例 CUnit测试套件 编写并运行他们的单元测试。以下代码片段显示了一个执行设置函数和单元测试的简单测试套件。

//+------------------------------------------------------------------+
//|                                                          MQL 单元 |
//|                                   版权所有 2021,尼克拉斯·施利姆 |
//|                             https://github.com/nschlimm/MQL5Unit |
//+------------------------------------------------------------------+
#财产版权 “版权所有 2021,尼克拉斯·施利姆”
#财产版本  “1.00”

#包括“MQLUnitTestLibrary.mqh”

整数m_movingAverageHandle;空白 初始化时() {
   m_testSuite = ComposeTestsuite();
};//+------------------------------------------------------------------+
//|移动平均指标的简单测试示例
//+------------------------------------------------------------------+CUnitTestSuite* ComposeTestsuite()
  {
   CUnitTestSuite* testSuite =新的CUnitTestSuite();
   testSuite.AddSetupFunction(1, Test_Indicators_copyBuffer_setup);
   testSuite.AddUnitTestFunction(2,Test_Indicators_copyBuffer);
   testSuite.AddTearDownFunction(3, Test_Indicators_copyBuffer_tearDown);
  返回测试套件;
  }//+------------------------------------------------------------------+
//|初始化指标的设置方法
//+------------------------------------------------------------------+
空白Test_Indicators_copyBuffer_setup()
  {// 初始化指标   m_movingAverageHandle=伊玛_象征,PERIOD_CURRENT,10,0,模式_SMA,PRICE_CLOSE);
  }//+------------------------------------------------------------------+
//|拆下并移除指示器
//+------------------------------------------------------------------+
空白Test_Indicators_copyBuffer_tearDown()
  {// 删除指示器   m_movingAverageHandle=无效的;
  }//+------------------------------------------------------------------+
//|测试指标
//+------------------------------------------------------------------+CUnitTestAsserts* Test_Indicators_copyBuffer()
  {
   CUnitTestAsserts* ut =新的CUnitTestAsserts(“测试指标_复制缓冲区”);
  双倍的移动平均数据[];
  复制缓冲区(m_movingAverageHandle,0,1,10,移动平均数据);
  // 检查数据是否复制到本地数组   ut.IsTrue(__文件__,__线__, 移动平均数据[0] >0);
  返回乌特;
  }//+------------------------------------------------------------------+

这是您需要做的:

如果一切正常,您可以在策略测试器日志中看到测试用例的结果,如下图所示。

MQLUnit - Tiny Unit Tests Framework For Complex Expert Advisors - script for MetaTrader 5

就这样。您已经定义了您的测试用例。您可以使用简单的框架首先编写定义程序组件接口的单元测试。结果是更简洁的设计和更好的可测试性。而且它肯定会提高节目质量。另一个优点是,当您更改程序时,您可以将所有测试重新运行为回归测试。

如果您有疑问或建议,请联系我们。我很高兴回答所有问题并对框架进行改进! 


附件下载

📎 mqlunittestasserts.mqh (13.42 KB)

📎 mqlunittestlibrary.mqh (2.15 KB)

📎 mqlunittestsuite.mqh (16.3 KB)

📎 simpletestsuite.mq5 (2.28 KB)

📎 suitetemplate.mq5 (1.24 KB)

Source: MQL5 #33089

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录