我在FlexUnit中需要它來測試私有方法。有沒有可能通過使用describeType進行反射來完成此操作,或者flexUnit是否有一些內置的工具?我不喜歡人爲限制,我無法測試私人功能,它大大降低了靈活性。是的,對我來說測試私有函數是一個很好的設計,所以請不要建議我重構我的代碼。爲了單元測試我不想打破封裝。在Flex中調用私有方法,Actionscript
1
A
回答
6
我99%肯定這是不可能的,我很想知道你爲什麼要這樣做。
您應該基於給定的輸入,對給定類的輸出進行單元測試,而不管類內發生了什麼。只要不改變預期的輸出(由單元測試定義),您確實希望允許某人能夠更改實現細節。
如果您測試私有方法,則對該類的任何更改都將與單元測試緊密結合。如果有人想重新編寫代碼以提高可讀性,或者進行一些更新以提高性能,那麼即使類仍然按照最初設計的那樣運行,他們將不得不更新單元測試。
我敢肯定,有些情況下測試私有方法可能是有益的,但我希望在大多數情況下它只是不需要。你不必破壞封裝,只是測試你的方法調用給出正確的輸出......不管內部代碼是什麼。
1
您不能使用describeType
。
從Livedocs - flash.utils package:
[...]
注:
describeType()
只顯示公共屬性和方法,而不會顯示 屬性和方法私有,在包內部或在自定義名稱空間中。[...]
2
只需創建一個名爲「單元測試」的公共方法,並調用該方法內的所有單元測試。拋出一個錯誤,當其中一個出現故障,並從你的測試框架稱之爲:
try {
myobject.unitTest();
} catch (Exception e) {
//etc.
}
0
當測試的私有方法的衝動是無法抗拒的我只創建一個可測試命名的方法。
在這樣的文件中聲明命名空間:
package be.xeno.namespaces
{
public namespace testable = "http://www.xeno.be/2015/testable";
}
然後你就可以使用可測試爲你想測試這樣的方法自定義訪問修飾符:
public class Thing1
{
use namespace testable;
public function Thing1()
{
}
testable function testMe() : void
{
}
}
你可以然後通過在測試中使用命名空間訪問該修飾符:
public class Thing2
{
use namespace testable;
public function Thing2()
{
var otherThing : Thing1 = new Thing1();
otherThing.testMe();
}
}
真的,雖然我t這意味着你應該將你的功能分解成一個單獨的類。
相關問題
- 1. 從JavaScript調用Adobe Flex/ActionScript方法?
- 2. 在Ruby中調用的私有方法
- 3. 私有方法調用另一個私有方法,做對嗎?
- 4. 從javascript調用actionscript方法
- 5. 在flex中調用Java方法HttpServletResponse 4
- 6. EasyMock的期望私有方法調用
- 7. Rails ActiveConcern調用私有方法
- 8. 調用抽象類的私有方法
- 9. ActionView的私有方法調用異常
- 10. ActionScript - 私有參數?
- 11. 使用findVirtual調用的方法處理私有方法
- 12. 在Android API中調用私有(未發佈)方法
- 13. 爲什麼在超級上下文中調用私有方法?
- 14. 在方法中調用私有最終變量時出現NullPointerException
- 15. 如何在SurfaceView的Activity中調用包 - 私有方法?
- 16. 調試Flex ActionScript單例程
- 17. 有沒有辦法在ActionScript中以編程方式添加Flex皮膚?
- 18. Rhino Mocks驗證私有方法是從公共方法調用
- 19. 從Ruby的類方法調用私有實例方法
- 20. Python:公共方法調用他們的'兄弟'私有方法
- 21. 從靜態方法調用私有方法
- 22. FLEX,Actionscript:我如何調用CustomEvent?
- 23. 調用保留調用堆棧的私有方法
- 24. 測試其調用內部調用私有方法
- 25. Xcode中的私有方法
- 26. ObjC++中的私有方法
- 27. Flex,Actionscript
- 28. 使用私有構造函數和私有靜態方法調用類?
- 29. Actionscript:從子類調用超類方法
- 30. 如何從ActionScript調用RemoteObject方法?