C#项目中的单元测试和模拟订阅客户端(Google Pub/Sub)
我正在.NETCore3.1项目中使用GoogleCloudPub/Sub(Google.Cloud.PubSub.V1(2.2.0))。 我正试图为从谷歌发布/订阅中检索消息的代码编写一个单元测试。 我的代码与您在Google文档中找到的类似C#项目中的单元测试和模拟订阅客户端(Google Pub/Sub),c#,unit-testing,mocking,google-cloud-pubsub,C#,Unit Testing,Mocking,Google Cloud Pubsub,我正在.NETCore3.1项目中使用GoogleCloudPub/Sub(Google.Cloud.PubSub.V1(2.2.0))。 我正试图为从谷歌发布/订阅中检索消息的代码编写一个单元测试。 我的代码与您在Google文档中找到的类似 var subscriber = await SubscriberClient.CreateAsync(subscriptionName); try { var startTask = subscriber.StartAsync(async (
var subscriber = await SubscriberClient.CreateAsync(subscriptionName);
try
{
var startTask = subscriber.StartAsync(async (PubsubMessage message, CancellationToken cancel) =>
{
//code
});
await Task.Delay(5000);
await subscriber.StopAsync(CancellationToken.None);
await startTask;
}
catch (Exception ex)
{
//code
}
有没有办法在单元测试中模拟SubscriberClient?SubscriberClient似乎没有接口。
我的单元测试使用NUnit(3.12.0)和Moq(4.14.5)
任何想法都将不胜感激。调用SubscriberClient.Create(…)
而不是。CreateAsync(…)
允许您传入底层subscriberServiceAppClient
实例
编辑:抱歉,以上内容不正确,应该是:
直接实例化SubscriberClientImpl
,而不是调用SubscriberClient.CreateAsync(…)
。这允许您传入底层subscriberServiceAppClient
实例。
请注意,您可以将Settings
参数的newsubscriberclient.Settings()
和shutdown
参数的null
作为默认值传递
SubscriberServiceApiClient
可以进行模拟-可以直接模拟,也可以通过实例化SubscriberServiceApiClientImpl
实例并传入模拟的Subscriber.SubscriberClient
测试时,请注意,SubscriberClient
是多线程的,使用默认设置,将从多个线程同时调用传递给StartAsync
的回调。调用SubscriberClient.Create(…)
而不是.CreateAsync(…)
允许您传入底层SubscriberServiceAppClient
实例
编辑:抱歉,以上内容不正确,应该是:
直接实例化SubscriberClientImpl
,而不是调用SubscriberClient.CreateAsync(…)
。这允许您传入底层subscriberServiceAppClient
实例。
请注意,您可以将Settings
参数的newsubscriberclient.Settings()
和shutdown
参数的null
作为默认值传递
SubscriberServiceApiClient
可以进行模拟-可以直接模拟,也可以通过实例化SubscriberServiceApiClientImpl
实例并传入模拟的Subscriber.SubscriberClient
测试时,请注意,
SubscriberClient
是多线程的,使用默认设置,将从多个线程同时调用传递给StartAsync
的回调。Hi Chris。如果我将代码从SubscriberClient.CreateAsync()更改为SubscriberClient.Create(),则会收到错误消息“无法在此处访问内部方法'Create'。我遗漏了什么吗?抱歉,你是对的,这个方法是内部的。我已经更正了答案。嗨,克里斯。如果我将代码从SubscriberClient.CreateAsync()更改为SubscriberClient.Create(),则会收到错误消息“无法在此处访问内部方法'Create'。我遗漏了什么吗?抱歉,你是对的,这个方法是内部的。我已经更正了答案。