我想模拟CreateTopicAsync方法。但由于班级的密封性,我无法嘲笑班级。 谁知道?
答案 0 :(得分:3)
你无法模拟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
的简单实现