Moq多个实例正在注入错误的属性

时间:2013-01-18 14:11:19

标签: mocking moq

我有以下合约在运行时获取注入属性:

public interface IBroker
{
   IDriver Driver { get; }
}

public interface IDriver
{
   void Save();
}

public class FileDriver : IDriver { }
public class SqlDriver : IDriver { }

我一次性准备我的模拟因为测试适应性非常大,我正在以下列方式准备我的经纪人的两个版本:

var mockFileBroker = new Mock<IBroker>();
mockFileBroker.Setup(x => x.Driver).Returns(new FileDriver());

var mockSqlBroker = new Mock<IBroker>();
mockSqlBroker.Setup(x => x.Driver).Returns(new SqlDriver());

问题在于,当我调查属性驱动程序时,对于两个模拟来说它总是类型为SqlDriver ...所以看起来 Moq 总是解析合同IDriver使用最新注册... 我有什么办法可以避免这种行为吗?

1 个答案:

答案 0 :(得分:1)

Moq将返回最新的注册,但仅限于同一个对象。

仔细检查你是不是在某个地方使用了错误的经纪人,或者你错过了某个地方的模拟,并且生产代码正在重新设置你的驱动程序。

Patrick Steele提出了一个很好的观点,你也应该考虑模拟返回的IDriver,特别是因为单元测试通常应该避免使用文件系统和数据库。