簡體   English   中英

如何使用Moq模擬NamespaceManager類的方法?

[英]How to Mock NamespaceManager Class Methods Using Moq?

https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.servicebus.namespacemanager?redirectedfrom=MSDN#microsoft_servicebus_namespacemanager

我想模擬CreateTopicAsync方法。 但是由於班級的封閉性,我無法模擬班級。 有誰知道?

您不能嘲笑sealed類。 模擬依賴於繼承來構建數據的實時副本。 因此,嘗試模擬sealed類是不可能的。

那我該怎么辦?

您可以做的是編寫一個包裝器:

public class NamespaceManagerWrapper : INamespaceManagerWrapper 
{
   private NamespaceManager _instance;

   public NamespaceManagerWrapper(NamespaceManager instance)
   {
      _instance = instance;
   }

   public ConsumerGroupDescription CreateConsumerGroup(ConsumerGroupDescription description)
   {
       return _instace.CreateConsumerGroup(description);
   }

   etc....
}

模擬界面

public interface INamespaceManagerWrapper
{
   ConsumerGroupDescription CreateConsumerGroup(ConsumerGroupDescription description);
   ....etc.
}

您的方法現在應該在原始對象上接受包裝器接口:

public void myMethod(INamespaceManagerWrapper mockableObj)
{
   ...
   mockableObj.CreateConsumerGroup(description);
   ...
}

現在您可以模擬界面:

Mock<INamespaceManagerWrapper> namespaceManager = new Mock<INamespaceManagerWrapper>();
....etc.

myObj.myMethod(namespaceManager.Object);

不幸的是,這是您可以做的最好的事情。 這是HttpContextWrapper的輔助實現

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM