首页 > 解决方案 > 尽管有 catch 块,Specflow 3.1 仍会抛出测试失败消息

问题描述

测试代码看起来像这样

if (table.ContainsColumn("DecisionGroupOptionId"))
{
    foreach (var tableRow in table.Rows)
    {
        try
        {
            var name = tableRow["DecisionGroupOptionId"];
            var code = _catalogLookupContext.DecisionGroupOptions.FindIdByName(name);
            tableRow["DecisionGroupOptionId"] = code;
        }
        catch (Exception)
        {
            //don't fail
        }
    }
}

public virtual string FindIdByName(string name)
{
    var item = _list.FirstOrDefault(r => r.Name == name);
    Assert.That(item, Is.Not.Null, "ID lookup by the name '{0}' failed. No such name exists in the map.", name);
    return item.Id;
}

测试日志输出:

   Failed : org.test.Test.Silverthread.test1
    ID lookup by the name '' failed. No such name exists in the map.
    Expected: not null
    But was:  null
    at org.test.Test.SilverThread.FindIdByName(String name) in IdLookup.cs:line 
    160

如果 'name' 为空,则测试日志显示失败。由于有 catch 块,这不应该显示失败吗?请帮忙。

测试项目使用如下程序集

 [SpecFlow]   SpecFlow.Tools.MsBuild.Generation, Version=3.1.0.0, Culture=neutral, PublicKeyToken=0778194805d6db41
 [SpecFlow]   TechTalk.SpecFlow, Version=3.1.0.0, Culture=neutral, PublicKeyToken=0778194805d6db41
 [SpecFlow]   TechTalk.SpecFlow.Generator, Version=3.1.0.0, Culture=neutral, PublicKeyToken=0778194805d6db41
 [SpecFlow]   TechTalk.SpecFlow.Utils, Version=3.1.0.0, Culture=neutral, PublicKeyToken=0778194805d6db41
 [SpecFlow]   TechTalk.SpecFlow.Parser, Version=3.1.0.0, Culture=neutral, PublicKeyToken=0778194805d6db41
 [SpecFlow]   TechTalk.SpecFlow.NUnit.Generator.SpecFlowPlugin, Version=3.1.0.0, Culture=neutral, PublicKeyToken=0778194805d6db41

标签: specflow

解决方案


推荐阅读