使用MS Moles Moling DataContext?

pan*_*hei 6 c# mocking moles pex-and-moles

我怎样才能扼杀我在类中使用的DataContext来将消息写入表中.我想声明LINQ写入的表具有预期的消息计数.这是我到目前为止所拥有的.

var context = new MJustTestingDataContext();
MyMessagewriter writer = new MyMessageWriter(context);

var messageList = new List<MIncmoingMessage>();
MTable<MIncomingMessage> messageTable = new MTable<MIncomingMessage>();
messageTable.Bind(messagesLinqList.AsQueryable());
Run Code Online (Sandbox Code Playgroud)

如果我在我的测试类中使用xUnit这个代码,我会得到这个异常

Microsoft.Moles.Framework.Moles.MoleNotImplementedException: DataContext.Dispose() was not moled.
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么以及如何在痣上实现DataContext.Dispose()?我在没有Pex的情况下独立使用鼹鼠.

Joã*_*elo 3

MoleNotImplementedException当您创建一个新的 Mole 时,其方法和属性的默认行为是在调用它们时抛出 a 。

要实现摩尔,您可以执行以下操作context.Dispose = () => {};,这意味着Dispose在摩尔实例上调用该方法时不会发生任何事情。 我重读了这个问题,您可能遇到了问题,因为Dispose它是在基类中定义的。对于摩尔基方法,您需要执行以下操作:

var context = new MJustTestingDataContext();
var baseContext = new MDataContext(context);

baseContext.Dispose = () => {};
Run Code Online (Sandbox Code Playgroud)

您需要实现被测试代码调用的每个属性/方法,或者您可以使用 method 全局设置mole实例的默认行为BehaveAsDefaultValue。这样,mole 中的每个方法都不会执行任何操作,并返回其返回类型的默认值(如果存在),而不是抛出MoleNotImplementedException. 但是,如果您需要这种行为,最好使用存根而不是摩尔。