我有以下合约在运行时获取注入属性:
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使用最新注册... 我有什么办法可以避免这种行为吗?
答案 0 :(得分:1)
Moq将返回最新的注册,但仅限于同一个对象。
仔细检查你是不是在某个地方使用了错误的经纪人,或者你错过了某个地方的模拟,并且生产代码正在重新设置你的驱动程序。
Patrick Steele提出了一个很好的观点,你也应该考虑模拟返回的IDriver
,特别是因为单元测试通常应该避免使用文件系统和数据库。