0

我有以下合同,它在运行时获取注入的属性:

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());

问题是,当我调查属性Driver时,两个模拟的类型始终为 SqlDriver ......所以看起来Moq总是使用最新注册来解决合同 IDriver ......我能做些什么来避免这种行为?

4

1 回答 1

1

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

仔细检查您没有在某处使用错误的代理,或者您在某处错过了模拟并且生产代码正在重新设置您的驱动程序。

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

于 2013-01-18T14:35:42.887 回答