MQL語言實現單元測試

文章目錄

    • 一、單元測試是什么
    • 二、單元測試的過程
    • 三、為什么需要單元測試
    • 四、MQL測試代碼實現

一、單元測試是什么

單元測試是對軟件中最小可測單元(如類或函數)進行獨立驗證和檢查的過程。它是由開發工程師完成的,旨在確保每個單元的功能和邏輯正確性。單元測試通常涉及驅動代碼、樁代碼和模擬代碼。

驅動代碼是用于調用被測試單元的代碼,它提供了測試輸入并捕獲輸出結果。樁代碼是用于模擬被測試單元所依賴的其他組件或模塊的代碼,以便在測試過程中隔離被測試單元。模擬代碼是用于模擬外部依賴的行為,以便在測試過程中控制和驗證被測試單元的交互。

二、單元測試的過程

  1. 確定要測試的單元:選擇一個具體的類或函數作為測試的目標。
  2. 編寫測試用例:根據被測試單元的功能和邏輯編寫多個測試用例,覆蓋不同的輸入和邊界情況。
  3. 編寫測試代碼:使用適當的測試框架編寫測試代碼,包括調用被測試單元并驗證輸出結果的斷言。
  4. 運行測試:運行測試代碼,確保所有的測試用例都能通過。
  5. 分析結果:檢查測試結果,查找失敗的測試用例并修復相關問題。
  6. 重復上述步驟:持續編寫和運行測試,直到所有的測試用例都能夠通過。

通過單元測試,開發工程師可以及早發現和修復代碼中的錯誤,提高代碼質量和可維護性,確保軟件的各個組件能夠正常工作。

三、為什么需要單元測試

  1. 確保代碼質量:單元測試可以幫助開發者驗證代碼的正確性,確保代碼按照預期工作。通過編寫針對每個函數或方法的單元測試,可以及早發現潛在的問題和錯誤,從而提高代碼的質量。

  2. 提高代碼可維護性:單元測試可以作為代碼的文檔,幫助開發者理解和維護代碼。當需要修改代碼時,可以通過運行單元測試來驗證修改是否影響了代碼的正確性。

  3. 支持重構和優化:單元測試可以在重構和優化代碼時提供保障。通過運行單元測試,可以確保重構和優化后的代碼仍然按照預期工作,避免引入新的問題。

  4. 提高開發效率:雖然編寫單元測試需要一定的時間和精力,但它可以幫助開發者在后期節省大量的調試時間。通過及早發現和解決問題,可以減少調試的時間和精力,提高開發效率。

  5. 支持持續集成和自動化測試:單元測試是持續集成和自動化測試的基礎。通過編寫可自動運行的單元測試,可以在每次代碼提交后自動運行測試,及早發現問題,確保代碼的穩定性和可靠性。

因此,單元測試是保證代碼質量、提高開發效率和可維護性的重要手段。

四、MQL測試代碼實現

#property link          "VX: mtquant"
#property version		"1.10"
#property description   "MQL語言的一個簡單的單元測試工具。."#define assert_equal(v_1, v_2) _assert_equal(__FILE__, __FUNCTION__, (string)__LINE__, (v_1), (v_2))class TestCase 
{protected:string errors[];uint   error_len;uint   tests_number;uint   successful_tests_number;uint   start_time;// changed parametersstring output_file_path;public:TestCase() {error_len = 0;tests_number = 0;successful_tests_number = 0;output_file_path = MQLInfoString(MQL_PROGRAM_NAME) + "_unit_test_log.txt";start_time = GetTickCount();}//void set_output_file_path(string _output_file_name){output_file_path = _output_file_name;};//void add_error(string error) {error_len++;ArrayResize(errors, error_len);errors[error_len-1] = error;}//template<typename T1,typename T2>void _assert_equal(string file, string func_sig, string line, T1 v_1, T2 v_2){tests_number++;// ex: TestFunc.mq4(38), MyTest::test_string_len(): 11 != 5if (v_1 != v_2) add_error(file + "(" + line + "), " + func_sig + "(): " + (string)v_1 + " != " + (string)v_2);elsesuccessful_tests_number++;}//string pretty_time(int ms) {return (string)(ms/1000) + " sec";}//bool check_file(int h_file) {if (h_file < 0) {Comment(output_file_path + ": Error with file creation (error: " + (string)GetLastError() + ")");return false;}return true;}//bool init_log_file() {int handle = FileOpen(output_file_path, FILE_WRITE, ";");if (!check_file(handle)) return false;FileWrite(handle, StringFormat("--- %s: Unit Test: running... ---", TimeToString(TimeLocal())));FileClose(handle);return true;}//virtual void declare_tests(){}//void run(){if (!init_log_file()) return;declare_tests();// write logint handle = FileOpen(output_file_path, FILE_WRITE, ";");if (check_file(handle)) {FileWrite(handle, StringFormat("--- %s: Unit Test: passed tests %d from %d (elapsed time: %s) ---",TimeToString(TimeLocal()), successful_tests_number, tests_number, pretty_time(GetTickCount() - start_time)));for (uint i=0;i<error_len;i++)FileWrite(handle, errors[i]);FileClose(handle);}}
};
class SimpleTest: public TestCase 
{void test_math_abs() {assert_equal(MathAbs(-1.25), 1.25);assert_equal(MathAbs(2.15), 2.15);}void test_string_len() {assert_equal(StringLen("xxx"), 3);assert_equal(StringLen("some string"), 5);  // test fails}void declare_tests() {test_math_abs();test_string_len();}
};double min(double v_1, double v_2) 
{if (v_1 > v_2) return v_2;return v_1;
}class MyFunctionTest: public TestCase 
{void test_my_function_min() {assert_equal(min(4, 10), 4);assert_equal(min(8, 1), 1);assert_equal(min(5, 0), 5);  // test fails}void declare_tests() {test_my_function_min();}
};void OnStart() 
{SimpleTest simple_test;simple_test.run();MyFunctionTest my_function_test;my_function_test.set_output_file_path(MQLInfoString(MQL_PROGRAM_NAME) + "_MyFunctionTest_unit_test.log");  // long namemy_function_test.run();
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696884.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696884.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696884.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Postman接口關聯實戰解析

在使用postman做接口測試時&#xff0c;有時候后面的接口需要獲取前面接口的某一個返回值做為請求參數&#xff0c;這時就可以使用關聯。 如從A接口提取出a字段的值&#xff0c;供B接口的b字段使用。 一個接口的返回報文如下&#xff1a; {"retCode": "0&quo…

SwiftUI 集合視圖(Grid)拖放交換 Cell 的極簡實現

概覽 自從 SwiftUI 橫空出世那天起&#xff0c;小伙伴們都感受到了它驚人的簡單與便捷。而在本課中&#xff0c;我們將會用一個小“栗子”更直觀的讓大家體驗到它無與倫比簡潔的描述性特質&#xff1a; 如上圖所示&#xff0c;我們在 SwiftUI 中實現了 Grid 中拖放交換 Cell 的…

基于SpringBoot + Layui的社區物業管理系統

項目介紹 社區物業管理系統是基于java編程語言&#xff0c;springboot框架&#xff0c;idea工具&#xff0c;mysql數據庫進行開發&#xff0c;本系統分為業主和管理員兩個角色&#xff0c;業主可以登陸系統&#xff0c;查看車位費用信息&#xff0c;查看物業費用信息&#xff0…

2個wordpress優化SEO主題模板

SEO優化wordpress主題 簡潔的SEO優化wordpress主題&#xff0c;效果好不好&#xff0c;結果會告訴你&#xff0c;適合SEO公司使用的主題。 https://www.jianzhanpress.com/?p2804 SEO優化海外WordPress主題 簡潔的SEO優化海外服務商WordPress主題&#xff0c;為中國制造202…

C# byte[]、struct、intptr、byte[]和byte*等的相互轉換

struct、byte[]互相轉換 //struct轉換為byte[] public static byte[] StructToBytes(object structObj) {int size Marshal.SizeOf(structObj);IntPtr buffer Marshal.AllocHGlobal(size);try{Marshal.StructureToPtr(structObj, buffer, false);byte[] bytes new byte[siz…

HTTP REST 方式調用WebService接口(wsdl)

一、WebService接口正常使用SOAP協議調用&#xff0c;測試時常采用SoapUI軟件調用&#xff0c;具體如下&#xff1a; 二、由于目前主流web服務逐漸轉換為RESTful的形式&#xff0c;且SOAP協議的實現也是基于HTTP協議&#xff0c;故存在通過HTTP調用WebService接口的可能 2.1 …

Flink雙流(join)

一、介紹 Join大體分類只有兩種&#xff1a;Window Join和Interval Join Window Join有可以根據Window的類型細分出3種&#xff1a;Tumbling(滾動) Window Join、Sliding(滑動) Window Join、Session(會話) Widnow Join。 &#x1f338;Window 類型的join都是利用window的機制…

【OpenFeign常用配置】

OpenFeign常用配置 快速入門&#xff1a;1、引入依賴2、啟用OpenFeign 實踐1、引入依賴2、開啟連接池功能3、模塊劃分4、日志5、重試 快速入門&#xff1a; OpenFeign是一個聲明式的http客戶端&#xff0c;是spring cloud在eureka公司開源的feign基礎上改造而來。其作用及時基于…

C++ template-2

第 5 章 基礎技巧 5.1 typename 關鍵字 關鍵字typename在C標準化過程中被引入進來&#xff0c;用來澄清模板內部的一個標識符代表的 是某種類型&#xff0c;而不是數據成員。考慮下面這個例子&#xff1a; template<typename T> class MyClass { public:void foo() {t…

【代碼隨想錄算法訓練營Day09】28.實現 strStr(); 459.重復的子字符串

文章目錄 Day 9 第四章 字符串part0228. 實現 strStr() &#xff08;本題可以跳過&#xff09;KMP 思路KMP 代碼 459.重復的子字符串 &#xff08;本題可以跳過&#xff09;字符串總結雙指針回顧 Day 9 第四章 字符串part02 今日任務 28.實現 strStr(); 459.重復的子字符串; 字…

題目:C++快速找到未知長度單鏈表的中間節點。普通方法和高級方法2種解題思路解析。

在數據結構的面試中&#xff0c;經常會出現這樣的問題&#xff1a;如何快速找到未知長度單鏈表的中間節點&#xff1f;通常&#xff0c;面試官會期待你提供兩種解法&#xff1a;一種是最基本的普通方法&#xff0c;另一種是更高效的 advanced 方法。本文將詳細介紹這兩種方法。…

Nginx -2

接著上文寫 5.4.7 驗證模塊 需要輸入用戶名和密碼 模塊名稱&#xff1a;ngx_http_auth_basic_module 訪問控制基于模塊 ngx_http_auth_basic_module 實現&#xff0c;可以通過匹配客戶端資源進行限制 語法&#xff1a; Syntax: auth_basic string | off; Default: auth_ba…

威爾金森功分器基本原理學習筆記

威爾金森功分器基本原理 威爾金森功率分配器的功能是將輸入信號等分或不等分的分配到各個輸出端口&#xff0c;并保持相同輸出相位。環形器雖然有類似功能&#xff0c;但威爾金森功率分配器在應用上具有更寬的帶寬。微帶形功分器的電路結構如圖所示&#xff0c;其中&#xff0…

【OpenAI Sora】何時開放使用?付費課程已上線(sora什么時候開放使用 )

Sora何時開放使用 根據提供的信息&#xff0c;Sora目前還未對廣大用戶開放。OpenAI在2024年2月15日展示了Sora的視頻&#xff0c;但沒有設立等待名單或提供API訪問。Sora仍在開發中&#xff0c;正在接受安全測試&#xff0c;并且尚未向公眾開放使用。 付費課程已上線 根據最…

Vue圖片瀏覽組件v-viewer,支持旋轉、縮放、翻轉等操作

Vue圖片瀏覽組件v-viewer&#xff0c;支持旋轉、縮放、翻轉等操作 之前用過viewer.js&#xff0c;算是市場上用過最全面的圖片預覽。v-viewer&#xff0c;是基于viewer.js的一個圖片瀏覽的Vue組件&#xff0c;支持旋轉、縮放、翻轉等操作。 基本使用 安裝&#xff1a;npm安裝…

費舍爾FISHER金屬探測器探測儀維修F70

美國FISHER LABS費舍爾地下金屬探測器&#xff0c;金屬探測儀等維修&#xff08;考古探金銀銅探寶等儀器&#xff09;。 費舍爾F70視聽目標ID金屬探測器&#xff0c;Fisher 金屬探測器公司成立于1931年&#xff0c;在實驗條件很艱苦的情況下&#xff0c;研發出了地下金屬探測器…

【Python】實現一個類似于Glass2k的Windows窗口透明化軟件

一 背景說明 網上看到一款Windows下的窗口透明化工具Glass2k&#xff08;Glass2k官網&#xff09;&#xff0c;可以簡單地通過快捷鍵實現任意窗口的透明化&#xff0c;還挺方便的&#xff0c;想用Python自己實現一下類似的功能。 軟件已經開源到&#xff1a;窗口透明化小工具開…

【Leetcode】889. 根據前序和后序遍歷構造二叉樹

文章目錄 題目思路代碼結果 題目 題目鏈接 給定兩個整數數組&#xff0c;preorder 和 postorder &#xff0c;其中 preorder 是一個具有 無重復 值的二叉樹的前序遍歷&#xff0c;postorder 是同一棵樹的后序遍歷&#xff0c;重構并返回二叉樹。 如果存在多個答案&#xff0c;…

CSS基礎屬性

【三】基礎屬性 【1】高度和寬度 &#xff08;1&#xff09;參數 width&#xff08;寬度&#xff09;&#xff1a;用于設置元素的寬度。可以使用具體的數值&#xff08;如像素值&#xff09;或百分比來指定寬度。 height&#xff08;高度&#xff09;&#xff1a;用于設置元…

Kubernetes 卷存儲 NFS | nfs搭建配置 原理介紹 nfs作為存儲卷使用

目錄 1、NFS介紹2、NFS服務部署2.1安裝nfs服務 (服務端配置)2.2啟動NFS服務2.3 服務檢查2.4 客戶端配置 3、nfs作為存儲卷使用3.1 nfs作為volume3.2 nfs存儲的缺點3.3 nfs作為PersistentVolum 4、nfs作為動態存儲提供5、總結 1、NFS介紹 NFS&#xff08;Network File System&a…