【发布时间】:2018-01-25 16:15:08
【问题描述】:
我正在尝试从我正在使用的库中模拟一个抽象类。我没有访问源代码,只有反编译版本:
public abstract class Event : IEnumerable<Message>, IEnumerable
{
protected Event();
public abstract bool IsValid { get; }
public IEnumerator<Message> GetEnumerator();
public IEnumerable<Message> GetMessages();
}
这个反编译的代码让我有点困惑。首先,冗余继承,也没有实现非抽象方法,例如GetEnumerator 或 IEnumerable.GetEnumerator()。但是它已经编译了,并且可以正常工作,所以我想这只是反编译的产物(如果这甚至是一件事?)
我已经尝试了以下模拟,它编译并运行而不会抛出异常。
public static Event GetMockedEvent()
{
var mock = new Mock<Event>();
mock.Setup(e => e.IsValid).Returns(true);
mock.As<IEnumerable>().Setup(e => e.GetEnumerator()).Returns(MessageList());
return mock.Object;
}
private static IEnumerator<Message> MessageList()
{
yield return GetMockedMessage();
yield return GetMockedMessage();
}
private static Message GetMockedMessage()
{
var mock = new Mock<Message>();
// Unimportant setups...
return mock.Object;
}
但是,我在以下方式测试的模拟对象中没有得到任何元素
var ev = GetMockedEvent();
foreach (var msg in ev)
{
//
}
但是枚举是空的,我不知道为什么。我已经为这个问题挠了一整天,所以我非常感谢你的帮助。
亲切的问候
【问题讨论】:
-
only the decompiled version:这不是反编译版本,它只是该类型的公共 API,任何使用它的人都需要访问它。