C# 模拟接口方法的接口对象
我有下面的接口方法,我嘲笑C# 模拟接口方法的接口对象,c#,unit-testing,moq,C#,Unit Testing,Moq,我有下面的接口方法,我嘲笑 public interface IMessageBus : IDisposable { IMessage CreateMessage<T>(T content); } 基本上,当我调用 创建消息 方法。我们如何才能做到这一点? 注意:我可以创建一个MockMessage类来实现IMessage接口并添加所需的功能。 但是我想知道,如果没有明确的类定义,我们是否可以做到这一点。 信息 public interface IMessage : ID
public interface IMessageBus : IDisposable
{
IMessage CreateMessage<T>(T content);
}
基本上,当我调用
创建消息
方法。我们如何才能做到这一点?
注意:我可以创建一个MockMessage
类来实现IMessage
接口并添加所需的功能。
但是我想知道,如果没有明确的类定义,我们是否可以做到这一点。
信息
public interface IMessage : IDisposable
{
string Id { get; }
string CorrelationId { get; set; }
string MessageContentType { get; }
TimeSpan? TimeToLive { get; set; }
AcknowledgementStatus AcknowledgementStatus { get; }
IDictionary<string, object> CustomHeaders { get; }
byte[] RawContent { get; }
void Abandon();
Task AbandonAsync();
void Acknowledge();
Task AcknowledgeAsync();
IMessage Clone();
T GetContent<T>();
T GetContent<T>(IBinarySerializer serializer);
IDictionary<string, object> GetMessageHeaders();
}
公共接口IMessage:IDisposable
{
字符串Id{get;}
字符串CorrelationId{get;set;}
字符串MessageContentType{get;}
TimeSpan?TimeToLive{get;set;}
AcknowlementStatus AcknowlementStatus{get;}
IDictionary自定义标头{get;}
字节[]RawContent{get;}
无效放弃();
任务放弃异步();
无效确认();
任务确认easync();
i消息克隆();
T GetContent();
T GetContent(IBinarySerializer序列化程序);
IDictionary GetMessageHeaders();
}
情况是这样的:
_messageBus.Setup(x => x.CreateMessage(It.IsAny<object>()))
.Returns<object>(obj =>
{
var item = new Mock<IMessage>();
// Setup properties/methods here
item.Setup(i => i.Id).Returns(obj.Id);
return item.Object;
});
\u messageBus.Setup(x=>x.CreateMessage(It.IsAny()))
.Returns(obj=>
{
var item=new Mock();
//此处设置属性/方法
item.Setup(i=>i.Id).Returns(obj.Id);
返回项。对象;
});
moq
支持LINQ-to-mock,如果您只想设置返回,那么它很有用
你怎么能用它
实际上,您非常接近解决方案,您可以执行以下操作:
_messageBus
.Setup(x => x.CreateMessage(It.IsAny<object>()))
.Returns(Mock.Of<IMessage>(m => m.Id == "MyId" && m.CorrelationId == "MyCorrelationId"));
你真的很接近,你能分享
IMessage
界面吗?分享了这个界面。
public interface IMessage : IDisposable
{
string Id { get; }
string CorrelationId { get; set; }
string MessageContentType { get; }
TimeSpan? TimeToLive { get; set; }
AcknowledgementStatus AcknowledgementStatus { get; }
IDictionary<string, object> CustomHeaders { get; }
byte[] RawContent { get; }
void Abandon();
Task AbandonAsync();
void Acknowledge();
Task AcknowledgeAsync();
IMessage Clone();
T GetContent<T>();
T GetContent<T>(IBinarySerializer serializer);
IDictionary<string, object> GetMessageHeaders();
}
_messageBus.Setup(x => x.CreateMessage(It.IsAny<object>()))
.Returns<object>(obj =>
{
var item = new Mock<IMessage>();
// Setup properties/methods here
item.Setup(i => i.Id).Returns(obj.Id);
return item.Object;
});
_messageBus
.Setup(x => x.CreateMessage(It.IsAny<object>()))
.Returns(Mock.Of<IMessage>(m => m.Id == "MyId" && m.CorrelationId == "MyCorrelationId"));
_messageBus
.Setup(x => x.CreateMessage(It.IsAny<object>()).Id).Returns("MyId");
_messageBus
.Setup(x => x.CreateMessage(It.IsAny<object>()).CorrelationId).Returns("MyCorrelationId ");