c# - 阻止 child 在最小起订量/AutoFixture 中 mock

标签 c# mocking moq autofixture

我遇到一个问题,moq 或 Ploeh.AutoFixture.AutoMoq 正在模拟所有子接口(interface),而在一种情况下我希望其中一个为空。

我正在使用 Npoc,它有一个名为 IDatabase 的接口(interface)

 public interface IDatabase : IDatabaseQuery
    {
        IDbConnection Connection { get; }
        IDbTransaction Transaction { get; }

        void AbortTransaction();
        void BeginTransaction();
        void BeginTransaction(IsolationLevel? isolationLevel);
        void CompleteTransaction();
        IDataParameter CreateParameter();
        int Delete(object poco);
        int Delete<T>(object pocoOrPrimaryKey);
        int Delete<T>(Sql sql);
        int Delete<T>(string sql, params object[] args);
        int Delete(string tableName, string primaryKeyName, object poco);
        int Delete(string tableName, string primaryKeyName, object poco, object primaryKeyValue);
        void Dispose();
        Transaction GetTransaction();
        Transaction GetTransaction(IsolationLevel? isolationLevel);
        object Insert(object poco);
        object Insert(string tableName, string primaryKeyName, object poco);
        object Insert(string tableName, string primaryKeyName, bool autoIncrement, object poco);
        void Save(object poco);
        void Save(string tableName, string primaryKeyName, object poco);
        IDatabase SetTransaction(IDbTransaction tran);
        int Update(object poco);
        int Update<T>(Sql sql);
        int Update(object poco, IEnumerable<string> columns);
        int Update(object poco, object primaryKeyValue);
        int Update<T>(string sql, params object[] args);
        int Update(object poco, object primaryKeyValue, IEnumerable<string> columns);
        int Update(string tableName, string primaryKeyName, object poco);
        int Update(string tableName, string primaryKeyName, object poco, IEnumerable<string> columns);
        int Update(string tableName, string primaryKeyName, object poco, object primaryKeyValue);
        int Update(string tableName, string primaryKeyName, object poco, object primaryKeyValue, IEnumerable<string> columns);
    }

我不想要 IDbTransaction Transaction { get; } 被 mock ,因为我希望它为 null 但它正在被 mock 。

然后我还有一个 IUnitOfWork,里面有 IDatabase 接口(interface)。

  public interface IUnitOfWork : IDisposable 
    {
        void Commit();
        IDatabase Db { get; }
        void SetOneTimeCommandTimeout(int timeout);
        void SetGlobalCommandTimeout(int timeout);
        void BeginTransaction();

    }

//代码

 fixture = new Fixture().Customize(new AutoMoqCustomization());
 fixture.Freeze<Mock<IDatabase>>();
 var test = fixture.CreateAnonymous<MyService>();

由于 Transaction 是一个只读属性,我不知道如何将它设置回 null。

最佳答案

尝试

  fixture = new Fixture().Customize(new AutoMoqCustomization());
  var mock = fixture.Freeze<Mock<IDatabase>>();
  mock.SetupGet(o => o.Transaction).Returns((IDbTransaction)null);
  var test = fixture.CreateAnonymous<MyService>();

关于c# - 阻止 child 在最小起订量/AutoFixture 中 mock ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15124054/

相关文章:

.net - 模拟对象的底层类型

c# - Winforms 选项卡页面上的关闭按钮

c# - 使用 C# 在 Excel 工作表中查找粗体文本

c# - 在测试中使用模拟

ios - 如何在 iOS 测试中实际使用 Stub 或 Mocking 对象?

c# - 结构图 - 在运行时用模拟对象替换接口(interface)

c# - 更改外部窗口的最小尺寸

c# - ref 或 out 参数必须是可赋值变量?

python - 在 python 中从 boto 模拟模块

c# - 使用 Moq 调用原始方法