MQLUnit - 复杂 EA 交易的微型单元测试框架 - 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); 返回乌特; }//+------------------------------------------------------------------+
这是您需要做的:
如果一切正常,您可以在策略测试器日志中看到测试用例的结果,如下图所示。
就这样。您已经定义了您的测试用例。您可以使用简单的框架首先编写定义程序组件接口的单元测试。结果是更简洁的设计和更好的可测试性。而且它肯定会提高节目质量。另一个优点是,当您更改程序时,您可以将所有测试重新运行为回归测试。
如果您有疑问或建议,请联系我们。我很高兴回答所有问题并对框架进行改进!
附件下载
📎 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
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
