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

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

description

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

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

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

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

果凍

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

簡介

● 任職於迎廣科技o python

o openstack

● c++, java, scala

● http://about.me/ya790206

● http://blog.blackwhite.tw

/

● https://github.com/ya790

206/call_seq

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

不重要的聲明

● 我用 unittest 的 libraray,不代表是 unittest

code 。● 故事純屬虛構。如有雷同,純屬巧合。

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

前情提要

● 有個 web service。● 使用者只有一種。● 要登入才能進行動作

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

一段測試碼

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

時間不斷的前進

● 有一天● 就是有一天● 使用者分成兩種!

o 假設分成兩種。 admin 和 user。o user 能使用的功能是 admin 的功能的子集合。

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

測試碼UserAdmin

重複的程式碼出現了

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

How to slove it?

● inherited

● composition今日重點

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

For admin

For user

我不想讓 base

class 被測試,因此跳過它。

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

● So far so good.

● But …

● If we have many test case, we need to add

`setUpClass` to every class.

● WTF !

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

redundancy

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

How to solve it ?

● decorator

● meta classSee it first.

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

decorator

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

Test Code

在多都不怕一行就搞定

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

● Decorator is good.

● Does it end?

● Not yet. If you have custom `setUpClass`,

how to make it?

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

Now we can custom setUpClass

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

● Does it end?

● Not yet. We have another redundancy code.

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

Test Code

redundancy(If

you don’t think

so, that’s ok.

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

How to slove it if you think it is

redundancy

● Multiple Inheritance

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

Login class go

first, so it can

call login

correctly.

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

How does it work?

● mro (Method Resolution Order )

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

Is it possible to make it shorter?

Maybe it’s

not useful.

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

Another way to solve redundancy.

● decorator

● meta class See it now.

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

Meta class

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

Meta class

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

Meta class

● 不算是一個好的作法● meta class 是為了建立 class 前,先作一些事

情。可是這個例子沒有。這個例子是事後才作些事情。

● 因為是事後才作些事情,因此可用 decorator

代替。

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

結論

● 懶得寫重複的程式碼是種美德:o 可以讓你維護更少的程式碼o 可以讓你寫更少的程式碼o 可以讓你讀更少的程式碼

● python 很好用,可以讓你懶惰。