簡體   English   中英

Python3中使用單元測試和正常做測試的區別

[英]Difference between using unit test and doing tests normally in Python3

使用單元測試和普通測試之間實際上有什么區別?

通過normal tests ,我的意思是,例如使用 if 語句來確定計算是否等於所需的答案,如果它返回 false,我們可以引發AssertionError

讓我們以一段簡單的代碼為例:

def square(a):
   return a*a;

旨在單獨查找此 function 中的錯誤的測試是單元測試。 這與您實際實現它們的方式無關:如果您只是編寫if (square(3) != 9)之類的if語句並按照您所說的那樣引發AssertionError ,那么它就是一個單元測試。 相反,如果您通過調用assertEqual使用unittest實現相同的測試,那么它也是一個單元測試。

換句話說,您是否使用(所謂的)單元測試框架並不是您的測試是否為單元測試的標准。 事實上,盡管有框架的名稱(Python 中的“unittest”,Java 中的“JUnit”,......)這些框架可以用於單元測試以及其他測試,例如集成測試。 因此,這些框架的名稱有點誤導。

關於單元測試和普通測試之間區別的原始問題就這么多。 在其中一條評論中,您更清楚地表明您實際上想知道什么更好:使用或不使用測試框架。 而且,答案很明確:絕對是 go 用於測試框架。

在“手工”編寫了幾個測試之后,也就是說,沒有測試框架,你會發現你的測試代碼中有很多重復:你將結果與if進行比較 - 這並沒有太大的不同。 但是,在成功的情況下,你寫一些“通過”的消息,帶有測試名稱,在失敗的情況下,你寫一個“失敗”的消息,同樣帶有測試名稱,在這種情況下,還有一些關於實際情況的額外信息什么是預期的結果。 而且——你有沒有想過被測代碼異常退出的情況? 因此,您還必須使用 try/catch 塊對其進行包裝,以確保意外異常導致“失敗”結果,並再次提供一些有用的診斷信息。

等等......所有這些以及更多內容都由測試框架為您處理。

根據您的問題,您假設有兩種測試類型:單元測試普通測試 事實上,有很多類型的測試。 單元測試就是其中之一。 您可以在此處閱讀其他類型的測試。

如果我們假設“正常測試”是“黑盒測試”。 它正在測試沒有源代碼的軟件。 對於單元測試,軟件的另一部分測試源代碼本身的完整性。 這意味着什么? 你寫了一個 function 對兩個數字求和。 對於單元測試,您正在編寫另一個 function 以檢查您的第一個 function 是否有效

# Your Function
def my_sum_function(x,y):
    return(x+y)

# Your Unit Test Function
def test_sum():
    assert my_sum_function([1, 2]) == 3, "Should be 6"

不僅對於Python而且對於所有編程語言背后的邏輯測試都是一樣的。

用於質量控制。 如果您在自己的庫中使用 function f1 和另一個 function f2(f2 使用 f1)編寫名為“app1”的應用程序

沒有單元測試:您可以在 function 中進行更改 f1 測試它,它將在 f2 中工作,但您不會注意到在您兩周前編寫的程序“app0”中它會使您的應用程序崩潰,因為在您的舊應用程序“app0 " 你有一個 function f3 並且 f3 也在使用 f1....

使用單元測試:您可以捕獲那種討厭的錯誤,因為 function f3 的測試將不再通過,您 IDE 會告訴您,當您在“7”應用程序中更改 ZC1C425268E68385D1AB5014F14C1 時

我希望它有意義(英語不是我的母語)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM