如何使用 Moq 模拟 NamespaceManager Class 方法?
How to Mock NamespaceManager Class Methods Using Moq?
我想模拟 CreateTopicAsync 方法。但是由于 class 的密封性质,我无法模拟 class。
有人知道吗?
你不能嘲笑 sealed
class。 Mocking 依赖于继承来构建数据的动态副本。所以试图模拟 sealed
class 是不可能的。
那我该怎么办?
你可以做的是写一个包装器:
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
的类似实现
我想模拟 CreateTopicAsync 方法。但是由于 class 的密封性质,我无法模拟 class。 有人知道吗?
你不能嘲笑 sealed
class。 Mocking 依赖于继承来构建数据的动态副本。所以试图模拟 sealed
class 是不可能的。
那我该怎么办?
你可以做的是写一个包装器:
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
的类似实现