如何测试一个教义库吗
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
如何测试一个教义库吗
另请参阅
的主要测试指南描述如何使用和设置您的自动化测试的一个数据库。本文的内容显示方式来测试您的教义存储库。
在单元测试中嘲笑教义存储库
单元测试原则库不推荐。存储库是测试一个真正的数据库连接。然而,如果你仍然需要这样做,看看下面的例子。
假设您想要的类测试是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24
/ / src /工资/ SalaryCalculator.php名称空间应用程序\工资;使用应用程序\实体\员工;使用学说\持久性\ObjectManager;类SalaryCalculator{私人美元objectManager;公共函数__construct(ObjectManager美元objectManager){美元这- >objectManager =美元objectManager;}公共函数calculateTotalSalary(美元id){美元employeeRepository=美元这- >objectManager- >getRepository(员工::类);美元员工=美元employeeRepository- >找到(美元id);返回美元员工- >getSalary () +美元员工- >getBonus ();}}
自EntityManagerInterface
通过构造函数注入到类,您可以通过一个模拟对象在一个测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39
/ /测试/工资/ SalaryCalculatorTest.php名称空间应用程序\测试\工资;使用应用程序\实体\员工;使用应用程序\工资\SalaryCalculator;使用学说\持久性\ObjectManager;使用学说\持久性\ObjectRepository;使用PHPUnit)\框架\TestCase;类SalaryCalculatorTest扩展TestCase{公共函数testCalculateTotalSalary(){美元员工=新员工();美元员工- >setSalary (1000年);美元员工- >setBonus (1100年);/ /现在,模拟存储库返回员工的模拟美元employeeRepository=美元这- >createMock (ObjectRepository::类);/ /使用getMock PHPUnit) 5.3或以下()/ / $ employeeRepository = $ this - > getMock (ObjectRepository::类);美元employeeRepository- >预计(美元这- >任何())- >方法(“发现”)- >willReturn (美元员工);/ /最后,模拟EntityManager返回存储库的模拟/ /不需要(这类注入测试/ /存储库使用而不是整个对象管理器)美元objectManager=美元这- >createMock (ObjectManager::类);/ /使用getMock PHPUnit) 5.3或以下()/ / $ objectManager = $ this - > getMock (objectManager::类);美元objectManager- >预计(美元这- >任何())- >方法(“getRepository”)- >willReturn (美元employeeRepository);美元salaryCalculator=新SalaryCalculator (美元objectManager);美元这- >assertequal (2100年,美元salaryCalculator- >calculateTotalSalary (1));}}
在这个例子中,您正在构建模拟从内到外,第一个创建员工得到返回的存储库
,这本身得到返回的EntityManager
。这种方式,没有真正的类是参与测试。
功能测试的教义库
在功能测试你会使用实际的原则使查询数据库存储库,而不是嘲笑他们。为此,把实体管理器通过服务容器如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
/ /测试/仓库/ ProductRepositoryTest.php名称空间应用程序\测试\存储库;使用应用程序\实体\产品;使用ob娱乐下载\包\FrameworkBundle\测试\KernelTestCase;类ProductRepositoryTest扩展KernelTestCase{/ * * *@var\学说\ ORM \ EntityManager * /私人美元entityManager;受保护的函数设置():无效{美元内核=自我::bootKernel ();美元这- >entityManager =美元内核- >getContainer ()- >get (“原则”)- >getManager ();}公共函数testSearchByName(){美元产品=美元这- >entityManager- >getRepository(产品::类)- >findOneBy ([“名字”= >“无价的小部件”]);美元这- >assertSame (14.50,美元产品- >getPrice ());}受保护的函数拆卸():无效{父::tearDown ();/ /这样建议避免内存泄漏美元这- >entityManager- >close ();美元这- >entityManager =零;}}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。