【发布时间】:2021-05-27 10:53:38
【问题描述】:
我在Specflow 测试中有这一步:
[Then(@"the enriched messages are written to the LC")]
public void ThenTheEnrichedMessagesAreWrittenToTheLC()
{
var LcApplicationOptions = new LcApplicationOptions();
_configuration.GetSection("LcApplication").Bind(LcApplicationOptions);
Subscription sub = new Subscription(LcApplicationOptions.LcVendor, LcApplicationOptions.LcInstrument);
MessageConsumer consumer = new NetMessageConsumer();
// If Client throws an exception via ctor then it probably cant find Config\Fields.json
using (Client c = new Client(LcApplicationOptions.LcHost, _loggerClient, _fieldDictionary, _subscriptionIdGenerator, _iLifetimeScope))
{
int subscriptionId;
c.OnConnected += Client_OnConnected;
c.OnClosed += Client_OnClosed;
// Register the subscription which will connect to LC and login first.
// Any updates for this instrument will be handled by "consumer".
subscriptionId = c.Register(sub, LcApplicationOptions.LcAuthToken, consumer);
// The subscriptionId is also reflected in sub.Id after the call.
Console.WriteLine("hit enter...");
//Console.ReadLine();
// You can unsubscribe like this
c.Unregister(sub.Id);
}
}
当我运行它时,我得到了这个错误:
[xUnit.net 00:02:31.22] System.ArgumentNullException:值不能为空。 (参数“记录器”) [xUnit.net 00:02:31.22] 堆栈跟踪: [xUnit.net 00:02:31.22] 在 Microsoft.Extensions.Logging.LoggerExtensions.Log(ILogger 记录器,LogLevel logLevel,EventId eventId,异常异常,字符串消息,Object[] args) [xUnit.net 00:02:31.22] 在 Microsoft.Extensions.Logging.LoggerExtensions.Log(ILogger 记录器,LogLevel logLevel,异常异常,字符串消息,对象 [] args) [xUnit.net 00:02:31.22] 在 Microsoft.Extensions.Logging.LoggerExtensions.LogError(ILogger 记录器,异常异常,字符串消息,对象 [] 参数) [xUnit.net 00:02:31.22] 在 NX.Data.Client.AddRequest(订阅订阅,ConsumerInfo ci,IMessageConsumer msgConsumer) [xUnit.net 00:02:31.22] 在 NX.Data.Client.Register(订阅订阅,字符串 authToken,IMessageConsumer msgConsumer) [xUnit.net 00:02:31.22]
问题是客户端构造函数如下,但我为logger传递了一个空值。
public Client(string lcClientAddress, ILogger<Client> logger, IFieldDictionary fieldDictionary, SubscriptionIdGenerator subscriptionIdGenerator, ILifetimeScope scope);
我按如下方式编辑了我的步骤类构造函数:
private readonly ILogger<Client> _loggerClient;
public EBSIntegrationTestStepDefinitions(ITestOutputHelper testOutputHelper, ScenarioContext scenarioContext, FeatureContext featureContext, ILogger<Client> loggerClient)
{
_loggerClient = loggerClient;
}
现在当我运行我的测试时,我得到了这个:
xUnit.net 00:00:01.08] BoDi.ObjectContainerException:接口无法解析:Microsoft.Extensions.Logging.ILogger
1[[NX.Data.Client, DpNet.Data, Version=0.0.2.178, Culture=neutral, PublicKeyToken=null]] (resolution path: ebs_test_tool.Steps.EBSIntegrationTestStepDefinitions) [xUnit.net 00:00:01.08] Stack Trace: [xUnit.net 00:00:01.08] at BoDi.ObjectContainer.TypeRegistration.<>c__DisplayClass3_0.<ResolvePerContext>b__1() [xUnit.net 00:00:01.08] at BoDi.ObjectContainer.RegistrationWithStrategy.ExecuteWithLock(Object lockObject, Func1 getter,Func1 factory, ResolutionList resolutionPath) [xUnit.net 00:00:01.08] at BoDi.ObjectContainer.TypeRegistration.ResolvePerContext(ObjectContainer container, RegistrationKey keyToResolve, ResolutionList resolutionPath) [xUnit.net 00:00:01.08] at BoDi.ObjectContainer.RegistrationWithStrategy.Resolve(ObjectContainer container, RegistrationKey keyToResolve, ResolutionList resolutionPath) [xUnit.net 00:00:01.08] at BoDi.ObjectContainer.ResolveObject(RegistrationKey keyToResolve, ResolutionList resolutionPath) [xUnit.net 00:00:01.08] at BoDi.ObjectContainer.Resolve(Type typeToResolve, ResolutionList resolutionPath, String name) [xUnit.net 00:00:01.08] at BoDi.ObjectContainer.<>c__DisplayClass71_0.<ResolveArguments>b__0(ParameterInfo p) [xUnit.net 00:00:01.08] at System.Linq.Enumerable.SelectArrayIterator2.ToArray() [xUnit.net 00:00:01.08] 在 System.Linq.Enumerable.ToArray[TSource](IEnumerable1 source) [xUnit.net 00:00:01.08] at BoDi.ObjectContainer.ResolveArguments(IEnumerable1 参数,RegistrationKey keyToResolve,ResolutionList resolutionPath) [xUnit.net 00:00:01.08] 在 BoDi.ObjectContainer.CreateObject(类型类型,ResolutionList resolutionPath,RegistrationKey keyToResolve) [xUnit.net 00:00:01.08] 在 BoDi.ObjectContainer.TypeRegistration.c__DisplayClass3_0.b__1() [xUnit.net 00:00:01.08] 在 BoDi.ObjectContainer.RegistrationWithStrategy.ExecuteWithLock(对象 lockObject,Func1 getter, Func1 工厂,ResolutionList resolutionPath) [xUnit.net 00:00:01.08] 在 BoDi.ObjectContainer.TypeRegistration.ResolvePerContext(ObjectContainer 容器,RegistrationKey keyToResolve,ResolutionList resolutionPath) [xUnit.net 00:00:01.08] 在 BoDi.ObjectContainer.RegistrationWithStrategy.Resolve(ObjectContainer 容器,RegistrationKey keyToResolve,ResolutionList resolutionPath) [xUnit.net 00:00:01.08] 在 BoDi.ObjectContainer.ResolveObject(RegistrationKey keyToResolve, ResolutionList resolutionPath) [xUnit.net 00:00:01.08] 在 BoDi.ObjectContainer.Resolve(类型 typeToResolve,ResolutionList resolutionPath,字符串名称) [xUnit.net 00:00:01.08] 在 BoDi.ObjectContainer.Resolve(类型 typeToResolve,字符串名称) [xUnit.net 00:00:01.08] 在 TechTalk.SpecFlow.Infrastructure.TestObjectResolver.ResolveBindingInstance(类型 bindingType,IObjectContainer 容器) [xUnit.net 00:00:01.08] 在 lambda_method(闭包,IContextManager,字符串,字符串) [xUnit.net 00:00:01.08] 在 TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding 绑定,IContextManager contextManager,Object[] 参数,ITestTracer testTracer,TimeSpan& 持续时间) [xUnit.net 00:00:01.08] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch 匹配,对象 [] 参数,时间跨度和持续时间) [xUnit.net 00:00:01.08] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(IContextManager contextManager, StepInstance stepInstance) [xUnit.net 00:00:01.08] 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep() [xUnit.net 00:00:01.08] 在 TechTalk.SpecFlow.TestRunner.CollectScenarioErrors() [xUnit.net 00:00:01.08] 在 ebs_test_tool.Features.EBSIntegrationTestFeature.ScenarioCleanup() [xUnit.net 00:00:01.08]
我在输出中也注意到了这一点:
[xUnit.net 00:00:01.09] 输出: [xUnit.net 00:00:01.09] 给定 MRF 应用程序“Eb.MarketFeed.Fx”运行版本“0.1.52” [xUnit.net 00:00:01.09] -> 错误:无法解析接口:Microsoft.Extensions.Logging.ILogger`1[NX.Data.Client, DpNet.Data, Version=0.0.2.178, Culture=neutral, PublicKeyToken =null]] (解析路径:eb_test_tool.Steps.IntegrationTestStepDefinitions) (0.0s)
以前,当我遇到类似错误时,我必须将 [Binding] 添加到我的班级,但我已经有了它。
我想知道这是否确实是一个绑定问题,或者只是我试图通过ILogger<Client> 是一个不是Client 的类。我该如何解决这个问题?
【问题讨论】:
标签: c# .net automated-tests bdd specflow