我已經開始了一個名爲omniprop的開源Scala項目。我目前正在探索的功能是如何讓項目的用戶堆疊JVM樣式的屬性提供程序。例如,您可能希望在java.lang.System
,Lift的util.Prop
和Typesafe的配置庫中查找屬性。由於omniprop的一些其他約束/特性,我需要這個堆棧配置駐留在一個已知對象中,所以庫的其他部分可以從這個堆棧中檢索屬性。Scala庫初始化設計
爲了使omniprop正常工作,需要在訪問任何屬性之前由庫的用戶調用此配置。因此,任何使用我的庫的項目都需要一個可以設置提供者堆棧的引導程序/初始化程序。此初始配置代碼的示例如下所示:
import com.joescii.omniprop.providers._
PropertyProviders.configure(List(
SystemPropertyProvider,
LiftPropsProvider
))
我面臨的挑戰是特別針對測試。爲了讓使用omniprop的項目的測試代碼正常工作,必須以某種方式在運行任何測試之前運行上述代碼。目前,我沒有看到用sbt或我熟悉的任何測試庫(如scalatest,scalacheck或specs2)來執行此操作的乾淨方法。實際上,每個測試套件都需要調用上面的代碼片段,這當然不是理想的。
這個問題的另一種方法是Lift所做的,其中每個項目必須有一個名爲bootstrap.liftweb.Boot
的類,庫被調用來設置一切。我發現這是一個合理的方法來處理像Lift這樣的Web框架,但對於一個小小的屬性幫助程序庫似乎太多了。
我真的在這裏有兩個問題:
- 我怎麼能有SBT調用上面的設置代碼與正確的類加載器的所有測試運行之前?
- 更重要的是,這是需要初始化的庫的最佳設計,還是有更好的方法?
我會去用的各種「類型安全的建設者」的模式之一。 –