2017-04-18 24 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了解更多。

相关问题