繁体   English   中英

C# 项目中的单元测试和 Mocking SubscriberClient (Google Pub/Sub)

[英]Unit Testing and Mocking SubscriberClient (Google Pub/Sub) in a C# Project

我在 .NET Core 3.1 项目中使用 Google Cloud Pub/Sub (Google.Cloud.PubSub.V1 (2.2.0))。 我正在尝试为从 Google Pub/Sub 订阅中检索消息的代码编写单元测试。 我的代码类似于您在 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(...)允许您传入底层的SubscriberServiceApiClient实例。

编辑:抱歉,以上不正确,应该是:

直接实例化SubscriberClientImpl而不是调用SubscriberClient.CreateAsync(...) 这允许您传入底层的SubscriberServiceApiClient实例。 请注意,您可以将new SubscriberClient.Settings()传递给settings参数,并将null作为默认值传递给shutdown参数。

可以直接模拟SubscriberServiceApiClient ,也可以通过实例化SubscriberServiceApiClientImpl实例并传入模拟的Subscriber.SubscriberClient来模拟。

测试时,请注意, SubscriberClient是多线程的,默认设置将调用从多个线程同时传递给StartAsync的回调。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM