c# - Microsoft ServiceBus 中 QueueClient 的 NUnit 测试
问题描述
我正在mocking
为QueueClient
. 我GetQueueClient
在ServiceBus class
. 我正在使用下面的代码。
using NUnit.Framework;
using Moq;
[TestFixture]
public sealed class FetchingTest
{
private Mock<IServiceBus> mockIServiceBus;
private Mock<QueueClient> queueClient1;
[TestFixtureSetUp]
public void Setup()
{
this.mockIServiceBus = new Mock<IServiceBus>();
this.queueClient1 = new Mock<QueueClient>();
}
[Test]
public void TestPagingUsesCorrectOffsets()
{
this.mockIServiceBus.Setup(p => p.GetQueueClient(Constants.FetcherQueueName)).Returns(queueClient1.Object); // Getting error here
}
}
服务总线类:
using Microsoft.ServiceBus;
public class ServiceBus : IServiceBus
{
private static readonly string ServiceBusConnectionString =
ConfigurationManager.AppSettings[ConnectionStringNames.ServiceBus];
public QueueClient GetQueueClient(string queueName)
{
return QueueClient.CreateFromConnectionString(ServiceBusConnectionString, queueName);
}
}
它抛出一个错误
Parent 没有默认构造函数。必须显式定义默认构造函数。System.NotSupportedException
有人可以帮我解决这个问题吗?
解决方案
确保您依赖于抽象而不是实现,以避免有问题的实现问题。
public interface IServiceBus {
IQueueClient GetQueueClient(string queueName);
}
public class ServiceBus : IServiceBus {
private static readonly string ServiceBusConnectionString =
ConfigurationManager.AppSettings[ConnectionStringNames.ServiceBus];
public IQueueClient GetQueueClient(string queueName) {
return QueueClient.CreateFromConnectionString(ServiceBusConnectionString, queueName);
}
}
这样抽象可以在测试时根据需要进行模拟
[TestFixture]
public sealed class FetchingTest
{
private Mock<IServiceBus> mockIServiceBus;
private Mock<IQueueClient> queueClient1;
[TestFixtureSetUp]
public void Setup() {
this.mockIServiceBus = new Mock<IServiceBus>();
this.queueClient1 = new Mock<IQueueClient>();
}
[Test]
public void TestPagingUsesCorrectOffsets() {
//Arrange
this.mockIServiceBus
.Setup(_ => _.GetQueueClient(Constants.FetcherQueueName))
.Returns(queueClient1.Object);
//...
}
}
推荐阅读
- firebase - AppleSignIn(与 Firebase 和 Expo)在本地工作,但不能独立工作
- mysql - 如果子查询返回多于 1 行,SQL 我可以创建一个 if 语句吗?
- onenote-api - 使用 API 从 onenote 课堂笔记本中删除学生时出错
- php - Laravel 6 - 在 Blade 中显示名称、邮政编码而不是 ID
- javascript - 无论如何都会出错 Uncaught TypeError: Cannot set property 'value' of null
- html - 该网站在默认移动浏览器上没有响应
- python - 无法使用 pyspark 运行简单的 hql 文件
- r - R:命名列表和描述列表
- javascript - 使用元素的子文本来设置/更新变量
- javascript - 在两个事件'mousemove'和'scroll'上显示自定义水平滚动条,然后在两个事件都没有触发约1秒时隐藏滚动条