當你說「測試」時,我假設你是指一些檢查邏輯,而不是單元測試。
在這種情況下,您可以使用依賴注入而不是靜態助手。
https://www.playframework.com/documentation/2.3.x/JavaInjection
上面的鏈接顯示瞭如何使用Guice處理請求時注入控制器的例子。
所以以前你的控制器會是:
public class Application extends Controller {
public static Result index() {
if (YourStaticHelper.yourStaticMethod.isOk()) {
return ok("It works!");
}
else {
return forbidden("NO");
}
}
}
現在,它會變成:
public class Application extends Controller {
@Inject
YourStaticHelperInterface checker;
public Result index() { // no longer static
if (checker.isOk()) {
return ok("It works!");
}
else {
return forbidden("NO");
}
}
}
所不同的是在前面的一個,如果你以某種方式需要新的幫手,你就必須改變控制器代碼使其適應變化,而在第二種情況下,您只需要在運行時注入一個不同的實現,就像isOk()那樣在接口中成爲契約。
好處?誰知道。如果我在家裏自己寫一些東西,或者控制器代碼實際上與幫助程序緊密耦合,我會選擇第一個。如果我在公司工作,我會選擇第二個。這完全是關於軟件工程狗屎,但這是事情的工作原理。
來源
2014-10-20 02:23:30
NSF
你爲什麼要實例化一個類來使用該方法?這個功能當然聽起來像是成爲靜態方法的強有力候選人。它是否安全......誰知道......我們不知道這個方法做了什麼!還有哪些其他物體可以安全使用...我不知道,我不完全確定你的擔憂是什麼... – Neilos 2014-10-19 22:12:18
我的問題是:我必須檢查以確保靜態方法(不在一個控制器)在線程安全的框架?在這方面,在這種情況下使用哪些播放對象(如Request,Session ...)是安全的?這是一個普遍的問題,關於做什麼和不該做什麼,做什麼是最好的方式。 – Romain 2014-11-01 21:18:50