Php 使用计算字段为连接表创建记录并测试流程
我在为正在编写的代码编写测试时遇到困难。我尝试为两个表创建一个连接表,如下所示:Php 使用计算字段为连接表创建记录并测试流程,php,sql,database,unit-testing,junction-table,Php,Sql,Database,Unit Testing,Junction Table,我在为正在编写的代码编写测试时遇到困难。我尝试为两个表创建一个连接表,如下所示: CREATE TABLE charges ( id bigint PRIMARY KEY, amount float, some_data hstore ) CREATE TABLE shipments ( id bigint PRIMARY KEY, weight float, some_data hstore ) CREATE TABLE distribute
CREATE TABLE charges (
id bigint PRIMARY KEY,
amount float,
some_data hstore
)
CREATE TABLE shipments (
id bigint PRIMARY KEY,
weight float,
some_data hstore
)
CREATE TABLE distributed_details (
charges_id bigint references charges (id),
shipments_id biging references shipments (id),
amount float,
another_calculated_field varchar
)
根据some_data
字段中的一些标准,我必须提取一组费用和一组装运,并通过shippings.weight
在这些装运中分配每个费用。金额
。结果将被存储分布式\u详细信息
。在执行此分发时,我还必须根据部分\u数据
中的剩余内容执行一些其他计算,这些数据将存储在分布式\u详细信息中。另一个\u计算字段
class Distributor
{
public $detailMapper;
public function distribute($charges, $shipments)
{
foreach ($charges as $charge) {
$distributedAmounts = $this->calculateDistributedAmounts($charge->getAmount(), $shipments);
foreach ($shipments as $shipment) {
$distributed_detail = $this->buildDistributedDetail($charge, $shipment, array_shift($distributedAmounts));
$this->detailMapper->save($distributed_detail);
}
}
}
public function calculateDistributedAmounts($shipments) {}
public function buildDistributedDetail($charge, $shipment, $distributedAmount) {}
}
有没有一种好的方法来测试这个函数,并确保这些分发的数量被实际提取并分配给每个记录?出于内存限制的原因,我已将每个细节的持久化委托给此方法中的detailMapper—有时我必须提取数万批货物,并且在一个数组中返回所有由此产生的费用将耗尽我的内存。如果没有完整的答案,这是不可能的。我的偏好是总是让测试用例安全地在生产环境中运行,这意味着它们不会永久地向数据库提交任何内容。虽然我在Perl中做了大部分工作,但相同的测试方法应该能够在PHP中工作
这允许您为整个逻辑(包括db查询)编写测试用例,而不必冒着用测试数据污染生产环境的风险。有点晚了,但我最终为这个问题开发了一个合适的解决方案。这里有两个大问题: