Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

減少重複的測試程式碼的一些方法

483 views

Published on

如何避免重複測試程式碼的一些方法

Published in: Software
  • Be the first to comment

減少重複的測試程式碼的一些方法

  1. 1. 減少重複的測試程式碼的一 些方法 果凍
  2. 2. 簡介 ● 任職於迎廣科技 o python o openstack ● c++, java, scala ● http://about.me/ya790206 ● http://blog.blackwhite.tw / ● https://github.com/ya790 206/call_seq
  3. 3. 不重要的聲明 ● 我用unittest 的libraray,不代表是unittest code 。 ● 故事純屬虛構。如有雷同,純屬巧合。
  4. 4. 前情提要 ● 有個web service。 ● 使用者只有一種。 ● 要登入才能進行動作
  5. 5. 一段測試碼
  6. 6. 時間不斷的前進 ● 有一天 ● 就是有一天 ● 使用者分成兩種! o 假設分成兩種。admin 和user。 o user 能使用的功能是admin 的功能的子集合。
  7. 7. 測試碼 Admin User 重複的程式 碼出現了
  8. 8. How to slove it? ● inherited ● composition 今日重點
  9. 9. 我不想讓base class 被測試, 因此跳過它。 For user For admin
  10. 10. ● So far so good. ● But … ● If we have many test case, we need to add `setUpClass` to every class. ● WTF !
  11. 11. redundancy
  12. 12. How to solve it ? ● decorator ● meta class See it first.
  13. 13. decorator
  14. 14. Test Code 在多都不怕 一行就搞定
  15. 15. ● Decorator is good. ● Does it end? ● Not yet. If you have custom `setUpClass`, how to make it?
  16. 16. Now we can custom setUpClass
  17. 17. ● Does it end? ● Not yet. We have another redundancy code.
  18. 18. Test Code redundancy(If you don’t think so, that’s ok.
  19. 19. How to slove it if you think it is redundancy ● Multiple Inheritance
  20. 20. Login class go first, so it can call login correctly.
  21. 21. How does it work? ● mro (Method Resolution Order )
  22. 22. Is it possible to make it shorter? Maybe it’s not useful.
  23. 23. Another way to solve redundancy. ● decorator ● meta class See it now.
  24. 24. Meta class
  25. 25. Meta class
  26. 26. Meta class ● 不算是一個好的作法 ● meta class 是為了建立class 前,先作一些事 情。可是這個例子沒有。這個例子是事後才 作些事情。 ● 因為是事後才作些事情,因此可用decorator 代替。
  27. 27. 結論 ● 懶得寫重複的程式碼是種美德: o 可以讓你維護更少的程式碼 o 可以讓你寫更少的程式碼 o 可以讓你讀更少的程式碼 ● python 很好用,可以讓你懶惰。

×