我在嘲笑下面的接口方法。
ismyTextFieldType: boolean;
togglemyPasswordFieldType(){
this.isTextFieldType = !this.isTextFieldType;
}
现在,我可以为我的单元测试模拟此界面,如下所示。
public interface IMessageBus : IDisposable
{
IMessage CreateMessage<T>(T content);
}
现在如何设置CreateMessage以返回所需的特定对象。
_messageBus = new Mock<IMessageBus>();
这只是返回一个空对象,但是我需要返回一个有效的对象。像这样
_messageBus.Setup(x => x.CreateMessage(It.IsAny<object>())).Returns(Mock.Of<IMessage>());
基本上,我需要在致电
时返回上述行CreateMessage
方法。我们怎样才能做到这一点?
注意:我可以通过创建一个实现JsonConvert.SerializeObject(obj); // where obj is an Object.
接口并添加所需功能的MockMessage
类来实现。
但是我想知道是否可以在没有显式类定义的情况下做到这一点。
IMessage
IMessage
答案 0 :(得分:1)
moq
支持LINQ to Mocks,如果只想设置退货,则很有用。
如何使用它?
实际上,您真的很接近解决方案,您可以这样做:
_messageBus
.Setup(x => x.CreateMessage(It.IsAny<object>()))
.Returns(Mock.Of<IMessage>(m => m.Id == "MyId" && m.CorrelationId == "MyCorrelationId"));
如果您不想使用此功能,或者需要比使用流利的api更复杂的东西(moq
处理内部对象):
_messageBus
.Setup(x => x.CreateMessage(It.IsAny<object>()).Id).Returns("MyId");
_messageBus
.Setup(x => x.CreateMessage(It.IsAny<object>()).CorrelationId).Returns("MyCorrelationId ");
答案 1 :(得分:0)
就像这样:
_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;
});