比方說,我有一個記錄爲collections.Sequence
ABC的函數。如何在ABC函數中測試這個函數中的代碼?我可以編寫單元測試(或測試)來確認我的代碼只調用由此ABC定義的方法,而不是通過list
定義的方法或collections.Sequence
的其他具體實現?還是有其他工具或方法來驗證這一點?測試Python代碼只使用ABC方法
2
A
回答
1
只需通過傳遞僅實現這些方法的類的實例來測試該函數。如果你需要,你也可以繼承一個內置的類型,如list
並覆蓋其__getattribute__方法,如:需要通過代碼
class TestSequence(list):
def __getattribute__(self, name):
if name not in collections.Sequence.__abstractmethods__:
assert(False) # or however you'd like the test to fail
return object.__getattribute__(self, name)
0
直接實現ABC自己,用方法爲瑣碎或複雜的:
import collections
class TestSequence(collections.Sequence):
def __init__(self):
pass
def __len__(self):
return 3
def __getitem__(self, index):
return index
如果你犯了一個錯誤,並忽略抽象方法的實現,你的代碼會產生一個錯誤:
TypeError: Can't instantiate abstract class TestSequence with abstract methods __getitem__
如果你的被測代碼調用ABC未定義的方法,您將看到通常沒有屬性錯誤:
AttributeError: 'TestSequence' object has no attribute 'pop'
相關問題
- 1. 的Python值測試「ABC」假
- 2. 使用Python測試非python代碼
- 3. 測試python代碼
- 4. 在測試方法和測試方法中使用相同的代碼
- 5. 測試我的方法的代碼
- 6. 賽璐珞代碼測試方法
- 7. 單元測試最簡單的方法Python的C代碼
- 8. 使用接口和私有方法取消可測試代碼
- 9. 使用MOQ測試此代碼的正確方法是什麼?
- 10. python單元測試方法
- 11. 方法裏面的測試方法Python
- 12. 代碼自編寫測試方法的pythonic方法
- 13. 使用只有源代碼的maven運行Android Junit測試
- 14. Microsoft測試管理器測試案例不使用最新的相關測試方法的代碼
- 15. 測試代碼
- 16. assert vs ==在Python中測試代碼?
- 17. 提高Python代碼的IO測試機
- 18. Python - 組織代碼和測試套件
- 19. 如何測試我的Python代碼?
- 20. 單元測試C生成python代碼
- 21. 代碼在一個Python的測試
- 22. python方法中斷代碼
- 23. 使用python測試base64編碼
- 24. 單元測試代碼調用靜態方法
- 25. 通用事件測試方法,防止代碼複製
- 26. 有沒有辦法使用多種測試方法運行Espresso測試,但只有一種設置方法?
- 27. 使用子進程的單元測試Python代碼.Popen
- 28. 如何對使用python-multiprocessing的代碼進行單元測試
- 29. 如何僅使用python unittest2對測試失敗執行代碼?
- 30. 在python中使用unittest庫進行代碼測試
「僅實現這些方法的類的實例」 - 這是我所要求的核心,我想:有沒有更容易的方法來獲得這樣的事情?你的方法有效,但是複製了已經在ABC中的信息。因此,存在不同步的風險,導致另一個錯誤等等。(另外,如果有人這樣做,他們可能會更好地使用模擬對象或類似的...取決於測試。) – detly
將使用'如果名稱不在Sequence .__ abstractmethods__'中解決您的問題? – jangler
然後我會更新我的答案以反映這一點。 – jangler