2011-01-20 30 views
0

這就是我想要在Visual FoxPro中完成的。我想寫一個父級的UnitTest類,可以通過子類創建單獨的單元測試。我希望父母Uni​​tTest可以有一個MainMethod檢查自己,然後找到並執行所有以「test_」開頭的方法。VFP類可以在運行時獲得它自己的方法的集合嗎?

這樣我就可以繼續在單元測試中編寫適當命名的函數,並且父級會知道如何在沒有任何額外輸入的情況下運行它們。但是,我無法找到任何方式在運行時從VFP獲取這些信息,而不需要孩子類明確定義方法名稱集合或這方面的東西(這正是我希望避免的)。

這裏是一個基本的存根:

define class UnitTest as custom && would be abstract if VFP supported that 

    procedure MainMethod() 
     && run all methods that begin with test_ 
    endproc 

enddefine 

define class AUnitTest as UnitTest 

    procedure test_thingA() 
     ... 
    endproc 

    procedure test_thingB() 
     ... 
    endproc 

enddefine 

會愛任何人對如何在從父子方法獲得靈感。 (也可以打開一個更好的實現思路,如果我正在討論這個錯誤,我認爲我要做的事情的基本概念很清楚)。

非常感謝!

回答

2

AMEMBERS()函數可用於獲取方法列表。

 
loX = CREATEOBJECT("AUnitTest") 
loX.MainMethod() 
STORE .NULL. TO loX 
RETURN 


define class UnitTest as custom 

    procedure MainMethod() 
     LOCAL lcCommand, lcName, lcType, lnMemberNo, lnTotalMembers 
     LOCAL ARRAY laMembers(1) 

     m.lnTotalMembers = AMEMBERS(laMembers, THIS, 1, "U") 
     FOR m.lnMemberNo = 1 TO m.lnTotalMembers 
      m.lcName = m.laMembers[m.lnMemberNo,1] 
      m.lcType = m.laMembers[m.lnMemberNo,2] 

      IF (m.lcType == "Method") AND (LEFT(m.lcName, 5) == "TEST_") 
       m.lcCommand = "THIS." + m.lcName + "()" 
       &lcCommand 
      ELSE 
       * do nothing 
      ENDIF 
     ENDFOR 

    endproc 

enddefine 

define class AUnitTest as UnitTest 

    procedure test_thingA() 
     WAIT WINDOW "Testing Thing A" 
    endproc 

    procedure test_thingB() 
     WAIT WINDOW "Testing Thing B" 
    endproc 

    procedure NotATest() 
     WAIT WINDOW "Not A Test" 
    endproc 

enddefine 
+0

這正是我所期待的,非常感謝!完美的作品 – goggin13 2011-01-21 15:08:25

相關問題