4

moq または Ploeh.AutoFixture.AutoMoq のいずれかがすべての子インターフェイスをモックしているときに、そのうちの 1 つを null にしたい場合に問題が発生しています。

私はNpocを使用しており、IDatabaseと呼ばれるインターフェースを持っています

 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; }nullにしたいので嘲笑されたくありません が、嘲笑されています。

次に、IDatabase インターフェイスを持つ IUnitOfWork もあります。

  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 に戻す方法がわかりません。

4

1 に答える 1

4

試す

  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>();
于 2013-02-27T23:25:22.707 に答える