1

在 Quality Center OTA API 中,如何从测试中删除步骤。当我使用 DesignStepFactory 的 RemoveItem 方法删除步骤时,它们仍然存在 - 我尝试通过 ID 和步骤引用删除:

Test test = _qcAccess.AddTest(folderId);
test.Name = "Test 1";
test.Post();

DesignStepFactory factory = (DesignStepFactory) test.DesignStepFactory;
DesignStep step = (DesignStep)factory.AddItem(1);
step.StepName = "Step1";
step.Post();

Test test2 = _qcAccess.FindExistingTest((int)test.ID);
DesignStepFactory factory2 = (DesignStepFactory) test2.DesignStepFactory;
Assert.Equal(1, test2.DesStepsNum);

factory2.RemoveItem(factory2[0]);
test2.Post();

Test test3= _qcAccess.FindExistingTest((int)test.ID);
Assert.Equal(0, test3.DesStepsNum); // test fails here, DesStepsNumb is still 1 

根据 OTA API 文档

RemoveItem 方法

描述:从数据库中删除项目。删除会立即进行,无需发布。

句法:

Public Sub RemoveItem(ByVal ItemKey As Variant)

项目密钥:

Step.ID(长),对 Step 对象的引用或 Step.IDs.Step.IDs 的 Variant 数组。

所以看起来它应该工作。仅供参考,这是针对 QC10 的。

有什么想法吗?

4

1 回答 1

0

解决方法是使用 List("") 来检索步骤列表,它似乎使用工厂上的索引访问器返回无效的步骤实例,其中 ID 只是元素的索引,并且所有属性都为空。

Test test = _qcAccess.AddTest(folderId);
test.Name = "Test 1";
test.Post();

DesignStepFactory factory = (DesignStepFactory) test.DesignStepFactory;
DesignStep step = (DesignStep)factory.AddItem(1);
step.StepName = "Step1";
step.Post();
test.Post();

Test test2 = _qcAccess.FindExistingTest((int)test.ID);
DesignStepFactory factory2 = (DesignStepFactory)test2.DesignStepFactory;
Assert.Equal(1, test2.DesStepsNum);

var list = factory2.NewList(""); // get a list
factory2.RemoveItem(list[1]); // note: list indexing starts at 1 (ugh!)
test2.Post();

Test test3 = _qcAccess.FindExistingTest((int)test.ID);
Assert.Equal(0, test3.DesStepsNum);
于 2010-10-07T18:50:35.200 回答