这是我在Visual FoxPro中想要实现的目标。我想编写一个父UnitTest类,它可以被子类化以创建单独的单元测试。我希望父UnitTest可以有一个MainMethod检查自己,然后查找并执行所有以“test_”开头的方法。
通过这种方式,我可以在单元测试中继续编写适当命名的函数,并且父级将知道如何运行它们而无需我的任何额外输入。但是,我无法找到任何方式在运行时从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
会喜欢任何人关于如何从父母那里获得孩子方法的想法。 (对于一个更好的实现想法也是开放的,如果我发生了这个错误,我认为我想要的基本想法是明确的。)
提前非常感谢!
答案 0 :(得分: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