如何测试一个教义库吗
编辑该页面如何测试一个教义库吗
另请参阅
的主要测试指南描述如何使用和设置您的自动化测试的一个数据库。本文的内容显示方式来测试您的教义存储库。
在单元测试中嘲笑教义存储库
单元测试原则库不推荐。存储库是测试一个真正的数据库连接。然而,如果你仍然需要这样做,看看下面的例子。
假设您想要的类测试是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/ / src /工资/ SalaryCalculator.php名称空间应用程序\工资;使用应用程序\实体\员工;使用学说\持久性\ObjectManager;类SalaryCalculator{公共函数__construct(私人ObjectManager美元objectManager,){}公共函数calculateTotalSalary(int美元id):int{美元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
/ /测试/工资/ SalaryCalculatorTest.php名称空间应用程序\测试\工资;使用应用程序\实体\员工;使用应用程序\工资\SalaryCalculator;使用学说\持久性\ObjectManager;使用学说\持久性\ObjectRepository;使用PHPUnit)\框架\TestCase;类SalaryCalculatorTest扩展TestCase{公共函数testCalculateTotalSalary():无效{美元员工=新员工();美元员工- >setSalary (1000年);美元员工- >setBonus (1100年);/ /现在,模拟存储库返回员工的模拟美元employeeRepository=美元这- >createMock (ObjectRepository::类);美元employeeRepository- >预计(美元这- >任何())- >方法(“发现”)- >willReturn (美元员工);/ /最后,模拟EntityManager返回存储库的模拟/ /不需要(这类注入测试/ /存储库使用而不是整个对象管理器)美元objectManager=美元这- >createMock (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
/ /测试/仓库/ ProductRepositoryTest.php名称空间应用程序\测试\存储库;使用应用程序\实体\产品;使用ob娱乐下载\包\FrameworkBundle\测试\KernelTestCase;类ProductRepositoryTest扩展KernelTestCase{私人\ \教义ORM \ EntityManager美元entityManager;受保护的函数设置():无效{美元内核=自我::bootKernel ();美元这- >entityManager =美元内核- >getContainer ()- >get (“原则”)- >getManager ();}公共函数testSearchByName():无效{美元产品=美元这- >entityManager- >getRepository(产品::类)- >findOneBy ([“名字”= >“无价的小部件”]);美元这- >assertSame (14.50,美元产品- >getPrice ());}受保护的函数拆卸():无效{父::tearDown ();/ /这样建议避免内存泄漏美元这- >entityManager- >close ();美元这- >entityManager =零;}}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。