【发布时间】:2021-04-28 20:04:52
【问题描述】:
我是集成测试的新手,我的任务是创建集成测试场景,用于 cli: bin/console import:products products.xml,它负责从 xml 文件中读取数据并将数据插入到数据库表中。
final class ProductImporter extends AbstractImporter implements ProductImporterInterface
{
private ResourceResolverInterface $productResourceResolver;
private ProductRelationsPurifierInterface $productRelationsPurifier;
private ProductImagesAssignerInterface $productImagesAssigner;
private ProductChannelsAssignerInterface $productChannelsAssigner;
private ProductDesignerAssignerInterface $productDesignerAssigner;
private static array $channels = [];
private static array $designers = [];
public function __construct(
ResourceResolverInterface $productResourceResolver,
ProductRelationsPurifierInterface $productRelationsPurifier,
ProductImagesAssignerInterface $productImagesAssigner,
ProductChannelsAssignerInterface $productChannelsAssigner,
ProductDesignerAssignerInterface $productDesignerAssigner
) {
$this->productResourceResolver = $productResourceResolver;
$this->productRelationsPurifier = $productRelationsPurifier;
$this->productImagesAssigner = $productImagesAssigner;
$this->productChannelsAssigner = $productChannelsAssigner;
$this->productDesignerAssigner = $productDesignerAssigner;
}
public function import(array $row): ?ResourceInterface
{
$code = $this->getColumnValue(self::CODE_TAG, $row);
$designerId = (int) $this->getColumnValue('designerID', $row);
$attributes = $this->getColumnValue(self::ATTRIBUTES_TAG, $row);
$productChannels = $this->getColumnValue('channelAttributes', $row)['channel'];
$images = $this->getColumnValue(self::IMAGES_TAG, $row)['image'];
$isHidden = (bool) $attributes['isHidden'];
/** @var ProductInterface $product */
$product = $this->productResourceResolver->resolveResource($code);
if (null !== $product->getId()) {
// only if product is already in db
$this->productRelationsPurifier->purifyRelations($product);
}
$product->setCode($code);
$product->setEnabled(!$isHidden);
$this->productImagesAssigner->assignImages($product, $images);
$this->productDesignerAssigner->assign($product, $designerId);
$this->productChannelsAssigner->assign($product, $productChannels);
return $product;
}
public function getResourceCode(): string
{
return 'product';
}
public static function setChannels(array $channels): void
{
self::$channels = $channels;
}
public static function getChannels(): array
{
return self::$channels;
}
public static function addDesigner(DesignerInterface $designer): void
{
self::$channels[] = $designer;
}
public static function getDesigners(int $designerId): ?DesignerInterface
{
/** @var DesignerInterface $designer */
foreach (self::$designers as $designer) {
if ($designer->getId() === $designerId) {
return $designer;
}
}
return null;
}
}
我的问题不是为我编写测试,而是向我展示如何/从哪里开始编写集成测试,以及我需要执行的步骤。
【问题讨论】:
-
到目前为止你尝试过什么?你被困在哪里了?
标签: php testing integration-testing behat