2014-02-09 25 views
6

說我在DART文件hello.dart定義的私有函數:如何測試Dart中的私人功能?

_hello() { 
    return "world"; 
} 

我想測試它在另一個文件mytest.dart

library mytest; 

import 'dart:unittest/unittest.dart'; 

main() { 
    test('test private functions',() { 
    expect(_hello(), equals("world")); 
    } 
} 

但不幸的是,測試代碼不能編譯。但我確實需要測試那個私人_hello函數。有沒有解決方法?

+1

相關:http://stackoverflow.com/questions/19677724/dart-unit-testing-private-methods – Freewind

回答

5

有幾個人認爲我們不應該直接測試私人:它應該通過公共接口進行測試。

遵循此指導的一個優點是您的測試不會取決於您的實施。換句話說:如果你想改變你的私人空間而不改變你對世界的暴露,那麼你就不必碰觸你的測試。

根據這所學校的說法,如果你的私人重要性足以證明一個單元測試的合理性,那麼在新課堂中提取它可能是有意義的。

把所有這些組合起來,你可以在這裏做什麼,就是:

  • 這種hello方法爲公衆創建一種輔助類的。然後,您可以輕鬆地單元測試
  • 讓你的當前類使用的輔助類
  • 測試實例當前類的公共方法依賴於_hello:如果私人有一個錯誤,應該是抓那些更高級別的測試
+0

您的建議是有道理的,但它看起來像所有語言。對Dart來說,這是最好的解決方案嗎? – Freewind

+0

正如你所猜測的,我的答案並不是特定於飛鏢。 – gturri

+3

我被嚴格的語言封裝強制遵循這個規則(就像我們大多數人一樣),我不相信這是足夠的一個理由,因爲私有方法可能會變得雜亂,複雜,遞歸等。因此,對於OP,我建議你確實將這些東西提取到一個新的類中,並保留重複的樣板(直到你遇到這個規則的例外,當然)。這將是一個很好的機會,使您的代碼具有通用性,抽象性並滿足我們在編寫高質量代碼時所喜愛的所有最佳實踐。 – MasterMastic