|
|
1
2
这是一个一般性的回答,因为我对Propel一点也不熟悉,只对PHP稍微熟悉一些。基本答案是使用依赖项注入。不要直接引用ORM,而是围绕它创建一个包装器,然后将包装器注入类/函数以实际使用。要进行单元测试,您需要创建一个模拟或伪版本的包装器,它不与ORM接口,而是让您配置从包装器到方法调用的响应。这允许您在单元测试功能时考虑ORM。 |
|
|
2
1
我发现模仿ORM并没有给我任何信心,因为ORM配置从未经过测试。ORM还具有许多远距离作用效应,这可能会给单元测试带来错误的置信度。模拟数据库驱动程序或提供备用内存数据库可以让我更加确信我的代码是正确的,这与模拟ORM一样困难。
|
|
|
3
1
我在建立一个新的系统时,试图解决同样的问题 PHPUnit plugin for Symfony Django's test framework 使用单独的数据库/连接,并在每次测试之前销毁和重建它。
|
|
|
4
0
我一直在看书 Misko Hevery's blog about testing 最近很多。它涵盖了这种情况;您需要使用DI(依赖项注入)。 我也在努力解决这个问题,我也使用了推进。
如果真的是需要测试的数据库,那么您需要让DB参与测试。在我当前的项目中,我经常使用ltree和postgis,除了在测试中包含它之外,我想不出任何其他方法来运行依赖于DB的模型逻辑的单元测试。 |
|
|
5
0
我们可以通过与另一个数据库的连接进行测试,但是,这不再是一个单元测试,而是一个集成测试。 我考虑的更好的替代方法是使用QueryFactory类,它将封装您需要的所有不同方法,然后您将能够模拟它。 首先,我首先创建一个接口
有一个注入查询工厂的业务逻辑
|
|
|
SliceOfLife · 推进一次保存调用,而不是每行一次 11 年前 |
|
|
WJR · Propel ORM-遍历find()中的数据不会提示getter 12 年前 |
|
|
nielsv · 从2个表中选择数据+推进 13 年前 |
|
|
nielsv · 无法访问新命名空间中的模型 13 年前 |
|
|
azzy81 · 推进ORM自引用外键 13 年前 |