C#项目中的单元测试和模拟订阅客户端(Google Pub/Sub)

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 (

我正在.NETCore3.1项目中使用GoogleCloudPub/Sub(Google.Cloud.PubSub.V1(2.2.0))。 我正试图为从谷歌发布/订阅中检索消息的代码编写一个单元测试。 我的代码与您在Google文档中找到的类似

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'。我遗漏了什么吗?抱歉,你是对的,这个方法是内部的。我已经更正了答案。