2017-04-18 28 views
4

我從來沒有真正寫過任何測試,因爲我通常必須使用低預算。所以我通常只是刪除演示文件。 但是,我注意到測試目錄已經從Symfony 2中的/ src/MyBundle/Test移到了Symfony 3中的/ tests,我想知道爲什麼?爲什麼Symfony 3單元測試移出實際包?

捆綁包或者至少我認爲它們是應用程序中潛在的「不可剔除」組件。這意味着總是可以在另一個Symfony「運行時」運行/使用相同的軟件包,而且幾乎毫不費力。

因此,將測試目錄從其相關軟件包移出到根目錄對我來說沒有任何意義。無理由地製作獨立的軟件依賴/不完整。這實際上讓我覺得我完全誤解了Symfony中bundle的概念。

我也注意到,Symfony的教程開始幾年前,迫使他們的用戶他們的模板進入/應用/資源。當我得知它時,他們在相關的包中有模板,這對我來說似乎更清潔。如果我已經在一個目錄中捆綁了所有東西(!),爲什麼我應該在外面移動任何東西?也許我在翻譯時遇到了一些問題,但在德語中,「捆綁」是一個單位。如果你拆分一捆,你會得到2,但不是一半。

我通常看到的Symfony作爲我的包配置的運行時間,所以我不碰任何東西外面/ src目錄之外composer.json,AppKernel或配置文件。

好吧,我可以承認,束可以根據周圍環境的反應不同 - 但單元測試甚至不應該依賴於上下文,如果我得到了他們的權利。

即使你看到的appbundle作爲一個相關的一個特殊的,上下文 - 它仍然是當一些文件可以存在,發現不一致的開發風格,別人可以在一個完全不同的地方被發現。至少AppBundle不應該是一個捆綁包。

回答

2

測試

我認爲這個改動是隻是爲了測試,從實際src文件夾移出。在其他編程語言(如JAVA)中這是最佳實踐,因爲測試不是您實際源代碼的一部分。測試也不包括在最終的工件中(以composer.phar爲例)以最小化它的尺寸。

test目錄結構是由從包目錄及其相關測試,所以仍然有分離試驗束:

 
tests/ 
├── AppBundle/ 
│ ├── Entity 
│ │ └── UserTest.php 
│ ├── Service 
│ ├── Other 
│ └── Etc 
├── OtherBundle/ 
│ ├── Controller 
│ └── Entity 
└── EtcBundle/ 

模板

至於模板而言,它是這樣更容易讓設計人員在單個目錄中查找所需的所有模板。

無論如何,這是我的兩美分。

+0

好的,謝謝,我想我現在明白了。我不得不承認,我並不是那麼有經驗的談論大事,但是一個捆綁包本身就是一種應用程序,所以所有相關的東西都應該放在它的目錄中。這包括測試以及模板。但是如果你真的花時間寫測試,我想在準備重用之前將它們移回到包中可能是最簡單的部分。 – sboesch

+1

如果包是共享的(你從作曲家等得到的),你所說的一切都是真的。如果你有幾個本地捆綁包,這種分離不再重要。 –

+0

你說得對。再想一想,我從來沒有真正擁有過任何捆綁軟件,我從一開始就不知道它會被重用。無論如何,我喜歡處理所有捆綁包,因爲我會重用它們,即使它完全沒有意義。如果沒有任何變化,我會在幾個小時內接受您的答案。 – sboesch

2

如果檢查composer.json文件,你可以看到,測試目錄(自動)只加載的開發環境,以便在生產系統中,你不是這個文件加載也有做。 舉例:

"autoload": { 
    "psr-4": { "": "src/" }, 
    "files": [ 
     "app/AppKernel.php" 
    ] 
}, 
"autoload-dev": { 
    "psr-4": { "Tests\\": "tests/" } 
}, 

這會加速您的應用程序自動加載。

希望這有助於

+0

感謝您的回覆!所以這種改變主要是由作曲家的性能/規模/侷限性來決定的,而不一定是有利於更好的軟件設計? – sboesch

+1

hi @sboesch我認爲主要好處是關於更好的設計和代碼理解。我只添加關於自動加載機制行爲的一面。 – Matteo

+1

有點令人失望,因爲設計點對我來說沒有多大意義,而關於性能的設計點卻沒有什麼意義。無論如何,我不應該把所有問題都帶來問題......無論如何謝謝@Matteo! – sboesch

0

這是因爲在Symfony的3還有應用程序軟件包和可重複使用的束之間的分離:

有兩種類型的束:

  • 特定的應用程序包:只用於構建您的應用程序;
  • 可重複使用的包:意味着在許多項目中共享。

本文全部是關於如何構建可重用捆綁包,以便 易於配置和擴展。許多建議 不適用於應用程序包,因爲您希望儘可能簡化爲 。

你可以在bundle best practices in Symfony瞭解更多。

相關問題