Visual studio 2008 我可以在VisualStudio2008中对集合重复单元测试吗?

Visual studio 2008 我可以在VisualStudio2008中对集合重复单元测试吗?,visual-studio-2008,unit-testing,Visual Studio 2008,Unit Testing,我有一个单元测试,其中我为集合中的每个项运行一个方法(使用foreach)。 目前,我在foreach的末尾有一个assert来测试该方法是否返回了正确的值。 这是可行的,但当方法第一次失败时,结果是测试失败。未测试集合中的子项 我想基本上运行一个完整的测试集合中的每一个项目。测试将针对每个项目运行,即使其中一项失败。“测试结果”窗口显示每次通过的结果数据 我知道我可以使用数据源为数据库中的每一行运行测试,但在这种情况下这并不方便。还有别的办法吗 我当前的测试如下所示: public void

我有一个单元测试,其中我为集合中的每个项运行一个方法(使用foreach)。 目前,我在foreach的末尾有一个assert来测试该方法是否返回了正确的值。 这是可行的,但当方法第一次失败时,结果是测试失败。未测试集合中的子项

我想基本上运行一个完整的测试集合中的每一个项目。测试将针对每个项目运行,即使其中一项失败。“测试结果”窗口显示每次通过的结果数据

我知道我可以使用数据源为数据库中的每一行运行测试,但在这种情况下这并不方便。还有别的办法吗

我当前的测试如下所示:

public void TestXHTMLBlock()
        {
            foreach (XmlNode current in Test_Cases.SelectNodes("Test_Cases/Test_Case"))
            {
                XHTMLBlock x = new XHTMLBlock(current.SelectSingleNode("Input").CreateNavigator(), "");
                XmlDocument temp = new XmlDocument();
                temp.LoadXml("<Output>" + x.sWordML(false) + "</Output>");


                XmlDiff diff = new XmlDiff(XmlDiffOptions.IgnoreComments |
                                     XmlDiffOptions.IgnoreDtd |
                                     XmlDiffOptions.IgnoreNamespaces |
                                     XmlDiffOptions.IgnorePI |
                                     XmlDiffOptions.IgnorePrefixes |
                                     XmlDiffOptions.IgnoreWhitespace |
                                     XmlDiffOptions.IgnoreXmlDecl);

                StringBuilder str = new StringBuilder();
                XmlWriter xwrite = XmlWriter.Create(str);

                bool ret = diff.Compare(current.SelectSingleNode("Output"), temp.SelectSingleNode("Output"), xwrite);
                xwrite.Close();

                Assert.IsTrue(ret, current.SelectSingleNode("Description").InnerText);
            }
        }
public void TestXHTMLBlock()
{
foreach(测试用例中的XmlNode当前。选择节点(“测试用例/测试用例”))
{
XHTMLBlock x=新的XHTMLBlock(当前.SelectSingleNode(“输入”).CreateNavigator(),“”);
XmlDocument temp=新的XmlDocument();
temp.LoadXml(“+x.sWordML(false)+”);
XmlDiff diff=新的XmlDiff(xmldifoptions.IgnoreComments|
XmlDiffOptions.IgnoreDtd|
XmlDiffOptions.IgnoreNamespaces|
xmldiffpoptions.IgnorePI|
XmlDiffOptions.IgnorePrefixes|
XmlDiffOptions.IgnoreWhitespace|
XmlDiffOptions.IgnoreXmlDecl);
StringBuilder str=新的StringBuilder();
XmlWriter xwrite=XmlWriter.Create(str);
bool ret=diff.Compare(当前选择单节点(“输出”),临时选择单节点(“输出”),xwrite);
xwrite.Close();
Assert.IsTrue(ret,current.SelectSingleNode(“Description”).InnerText);
}
}

我知道这看起来像是XML数据源的主要候选对象,但我无法让它工作。输入标记包含数据源试图解析的XML。这意味着我无法在测试中正确访问它,数据源解析器会阻塞一些输入XML。如果我能够告诉datasource XML解析器将内部XML作为文本处理,那也可以…

您可以将测试单个项的结果放在集合中,并在foreach之后断言该集合是否包含任何内容。下面是示例代码片段来说明这个想法

List<Item> errors = new List<Item>();
foreach(Item item in items)
{
   if( string.IsNullOrEmpty(item.Name))
   {
     errors.Add(item);
   }
} 
Assert.IsTrue(errors.Count == 0,"There are items with no name"); 
List errors=newlist();
foreach(项目中的项目)
{
if(string.IsNullOrEmpty(item.Name))
{
错误。添加(项);
}
} 
Assert.IsTrue(errors.Count==0,“存在没有名称的项”);

如果您想在测试失败时查看更多详细信息,可以编写一个实用程序方法,该方法迭代错误集合并生成详细消息,然后在断言中使用。

如果您使用的是nUnit 2.5.x,则
ValueSourceAttribute
可能就是您要查找的。对于指示的<代码>的每个成员,IcQuestaby将重复整个测试一次。

< P>我会考虑使用String Bu建器并在每个错误上附加一个字符串。


最后,您可以检查StringBuilder是否为空,然后将其写入console/debug/trace,无论您的单元测试框架自动收集什么,并通过Assert.fail()或类似方法让测试失败。您可以发布您当前拥有的内容,以便我们更好地了解您正在查看的内容吗?