LabVIEW Pro 專業論壇-技術討論區-LabVIEW Unit Test Framework的問題
 
     
 
 
 
LabVIEW 討論區基礎教學每月專題分享技術問題精選online Test
技術討論區 ★LabVIEW Pro 嘉年華★ 程式分享區 教育訓練與認證區 閒話家常區 工作機會討論區 回報區 高手專訪系列 2017 LabVIEW 至尊爭霸賽
 熱門關鍵字 
    量測概念充電站    TOP 資源排行榜    取得 NI 協助    3小時內學會 LabVIEW    LabVIEW Pro 嘉年華
 您的位置:首頁 > 技術討論區 > LabVIEW Unit Test Framework的問題
  技術討論區   板主:meiae
 之1(3篇)
LabVIEW Unit Test Framework的問題 
 
ac12cb3a
暱稱:
經驗值:31
等級:學徒
發文:1
回文:2
版本:
闖關狀態:
前往地圖:
 
字級設定

版上的各位前輩好,最近剛好有機會接觸到LabVIEW的Unit Test Toolkit,在User-defined test功能的使用上遇到了一些問題。我有參考examples\Unit Test Framework\User-Defined Test的範例中的User-defined test advance.vi來了解如何使用User-defined test,這個範例中的待測sub-vi只是一個簡單的加法而已。由此範例可以看出使用者只要將自製測試方法的結果塞到"Unit Test Framework Results"中,Unit Test Framework便會自動去讀此cluster便產出對應的test report。

[+]放大圖片
 

我的問題便出在這,我看此cluster中沒有地方可以讓我塞這個case的input值,如我想要修改上述範例中的inptut 3, 4改為5, 6時,Test Report中的input欄位並沒有正確的顯示

[+]放大圖片
 

[+]放大圖片
 

不知道是否有辦法可以在User-defined test中給予正確的inpu value資訊以得到正確的test report。墾請各位前輩賜教,感激不盡。

 

註:我有嘗試去NI_UnitTestFramework.lvlib/common中拿有包括input parameter的typedef(這邊我選了utf_test_result_troll_new.ctl)來取代原本範例中的"Unit Test Framework Results"來測試Unit Test Framework是否可以正確作動,結果是Unit Test Framework根本沒辦法跑

  文章人氣: 1030 讚:0 文章日期:2017/10/12 20:54
finger86

暱稱:finger
經驗值:356
等級:導師
發文:4
回文:50
版本:LabVIEW 2011
闖關狀態:
冰火山
前往地圖:
1樓
字級設定

在LabVIEW Project,以滑鼠右鍵點選 "User-Defined Advanced.lvtest",

出現Shortcut Menu之後選擇 "Open in External Editor",你可以看到 Excel開起來詳細設定。

其中 Test Case 裡頭有In/Out 的設定。

    讚:0 文章日期:2017/10/12 23:48
caeru

暱稱:星羽
經驗值:6528
等級:總舵主
發文:22
回文:530
版本:請選擇
闖關狀態:
英雄殿
前往地圖:
2樓
字級設定

Unit Test Framework(UTF)我沒玩到要user-defined test還要自動對照報表的Q_Q

因為他報表的API鎖起來,要改的話我想應該不太容易就是。

 

如果不用user defined test,倒是可以透過test case來修改,

例如以這個範例而言,打開User-Defined Advanced.lvtest,並取消下方的use user defined test vi

[+]放大圖片
 

接著進到test cases頁面去修改或新增你預期的輸入參數及輸出結果

[+]放大圖片

最後就可以在報表上看到測試結果

 
[+]放大圖片
 

 

我覺得UTF好用就只有在設定向量跟OO測試,

不過自己寫UTF也可以寫出向量,連測試表格都可以自己寫,自由度大增,

至於OO我還不熟悉如何做UTF比較好QQ

看看有沒有高手可以分享更進階的UTF

    讚:0 文章日期:2017/10/13 00:44
ac12cb3a

暱稱:
經驗值:31
等級:學徒
發文:1
回文:2
版本:
闖關狀態:
前往地圖:
3樓
字級設定


@finger86大:
原來還有這樣的方式,受教了。看起來以這種打開.lvtest檔來做修改的動作可以寫在user-defined test中的setup階段,等等來去試試看。萬分感謝。

@caeru大:

謝謝您的回應,我也有"如果用user-defined test的話,乾脆自己去寫UTF"的這種想法,反正都自己拼出一整個test case XD。


這邊我會用user-defined test的原因是因為單純使用內建的test case來跑會出現一些很奇怪的狀況QQ。我想要測試一個有functional global variable功能的vi,因為這個vi內部有使用到serial VISA的vi,我會需要setup/teardown function來open/close VISA,執行這個test case後,我發現最後的結果會被teardown的vi的輸出蓋掉。
簡易的上述現象重現方式:

(1)建一個functional global variable,其中包含init(將值塞入shift register), read(將shift register的值讀出),以及End(給一個值,這個state是要模擬VISA所需要的teardown function)

[+]放大圖片
 
[+]放大圖片
 
[+]放大圖片
 

(2)Setup / teardown vi如下

[+]放大圖片
 
[+]放大圖片
 

(3).lvtest的設定

設定input Enum為"read"(0),並設定好setup與teardown vi

理論上我得到的output應該都是123吧(因為我在.lvtest中給的state為"read")

[+]放大圖片
 

[+]放大圖片
 

(4).得到report如下,發現output會得到經過"End" state(teardown vi)的output結果(789)...,跟預期不符

[+]放大圖片
 

猜測這個問題是出在Unit Test Framework讀取indicator的時機點,它會在teardown vi結束才去讀對應indicator的值;而不是在teardown vi執行以前,導致上述現象的出現...

 

順帶一提,請問大家有試過對有HW dependency的sub-vi作Unit Test的經驗嗎? 以前有試過C語言的Unit Test Framework,像這種有HW dependency的function要測試,我們都會建一些假的function(mock object, stub, spy...)來在link time(用不同.o 檔來link)或Run-time(funciton pointer的概念)時取代在這一些dependency,這一些假function可能只是回傳預期的值或者是接受前端給的command。

 

舉個例子,有一些程式需要UART的連線,必須要呼叫UartConnect()之類的函式。這時候我們就可以自己寫一個假的UartConnect(),這個假function裡面可能只是記錄前端給了甚麼command或依照設定回傳error code而不是真的去操作HW,這樣我們便可以透過設定這個假function來模擬HW的行為,而不是要真的去操作HW來得到對應狀態(如模擬線忘記的狀況,我們不需要去真的去拔線,而是可以設定假UartConnect()來輸出對應的error code便可以確認待測程式是否可以做正確的反應)

 

不知道有沒有辦法在LabVIEW的環境下也做到上述的動作,我也對OO不熟QQ,但感覺起來似乎還是要使用到OO才可以做到上述動作...
 

    讚:0 文章日期:2017/10/13 14:58
 之1(3篇)
 
 
   會員中心 
帳號:
     
密碼:
     
  以後自動登入
 
註冊
   待回覆文章 
1. 如何把DAQ的量測訊號傳入SQL EX...
 
   Top 5 熱門討論 
1. 請問有關circle 檢測的範例
2. 寫一元二次式,當中的錯誤點該如何才能解...
3. Crash Reporter問題
4. 如何把DAQ的量測訊號傳入SQL EX...
5. 有關LABVIWE與PLC無法控制,因...
 
 
 
LabVIEW討論區 站長信箱 關於我們 站內聲明
國家儀器股份有限公司贊助;Sponsored by NI.
© 2010 National Instruments, Taiwan. All rights reserved. design by begonia