SpecFlow如何覆盖原始异常堆栈跟踪信息

5

你们中有人知道一种方法可以关闭标题中提到的行为吗?每次我在测试步骤中做错事情时,异常看起来像下面这样:

Test method 
FunctionalTests.Features.Parties.PartyAddingFeature.FeatureTitle threw exception: 
TechTalk.SpecFlow.BindingException: Error calling binding method 'FunctionalTests:FunctionalTests.Steps.PartiesSteps.GivenLegacyPartyUpsertedIntegrationEventCameInWithData(String, Table)': Object of type 'System.String' cannot be converted to type 'System.Int32'.
    at TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration) in D:\a\1\s\TechTalk.SpecFlow\Bindings\BindingInvoker.cs:line 69
   at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch match, Object[] arguments) in D:\a\1\s\TechTalk.SpecFlow\Infrastructure\TestExecutionEngine.cs:line 395
   at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(IContextManager contextManager, StepInstance stepInstance) in D:\a\1\s\TechTalk.SpecFlow\Infrastructure\TestExecutionEngine.cs:line 316
   at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep() in D:\a\1\s\TechTalk.SpecFlow\Infrastructure\TestExecutionEngine.cs:line 132
   at FunctionalTests.Features.Parties.PartyAddingFeature.ScenarioCleanup()
   at FunctionalTests.Features.Parties.PartyAddingFeature.FeatureTitle() in C:\Project\test\Services\FunctionalTests\Features\Parties\PartyAdding.feature:line 25

你能发布发生这种情况的场景和绑定吗?我认为这个错误更多地与参数转换有关,而不是步骤内部的错误。 - Andreas Willich
这与参数转换有很大关系,但这不是问题的重点 :) 问题在于我的步骤包含了几个需要进行转换(或应该进行转换)的地方,但问题在于堆栈跟踪没有指向特定位置,这意味着SpecFlow框架已经吞噬了原始异常并用自己的堆栈跟踪覆盖了它。我正在寻找一种方法使这些堆栈跟踪变得正常。 - Marek M.
1个回答

0
根据您的意见,这种情况应该使用什么样的正确异常呢? 我的意思是,我们没有看到或者不了解您的代码。从您发布的堆栈跟踪信息来看,它表明在进入Given/when/then方法之前,您遇到了参数转换的问题。

2
正确的堆栈跟踪应该指向异常实际发生的代码位置,对吧?它指向了一些BindingInvoker方法,但只到了一半的位置 :) - Marek M.
非常容易复现。只需在您的步骤中抛出异常-您将不会在那里看到完整的堆栈跟踪,但类似于我的一个,而小差异将是您的步骤名称和异常消息。 - Marek M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接