2

FakeItEasy の使用方法を学習しようとしていますが、アクセスできる古いプロジェクトのデータ アクセス コードで使用してみました。FIE の基本は非常に簡単に思え、単純なケースを機能させることができましたが、これには困惑しました。

システムは Entity Framework を使用し、データ管理クラスの 1 つはユーザーを処理します。基本的な機能だけをテストする方法を見つけようとしていGetUserByUserNumberます。IPersistenceManager<User>UserDataManager クラスをインスタンス化するときに偽物を使用してからGetUserByUserNumberメソッドを呼び出すことができますが、呼び出されたことを確認するアサーションuserPersistenceManager.ReadCustomは常に失敗します。

false で Delete メソッドを呼び出してみましたがuserPersistenceManager、そのアサーションは正常に機能します。ReadCustomメソッドが最初のパラメーターとして取るLinq式と関係があると思います。私はそれをどのように処理すればよいのかわかりません。これについての助けをいただければ幸いです!

これは、テストしようとしている UserDataManager のメソッドです。

public User GetUserByUserNumber(string userNumber, bool loadRelatedRecords = false)
{
    if (string.IsNullOrWhiteSpace(userNumber))
    {
        throw MyAppExceptions.CreateMyAppFatalException(Constants.ExceptionKeys.Unexpected, new ArgumentNullException("userNumber"));
    }
    Logger.Write(string.Format("Executing GetUserByUserNumber with UserNumber {0}.", userNumber), LogCategory.General, TraceEventType.Verbose);
    return _UserPersistenceManager.ReadCustom(mem => mem.UserNumber == userNumber, EntityConstants.EntityNames.UserDetail);
}

これは、確実に呼び出されるようにしたい IPersistenceManager メソッドです。

TEntity ReadCustom(Expression<Func<TEntity, bool>> predicate, string includeEntityName);

これは私の単体テストです:

[TestMethod]
public void GetUserByUserNumber_Calls_ReadCustom()
{
    // Arrange
    var userPersistenceManager = A.Fake<IPersistenceManager<User>>();
    var dataManager = new UserDataManager(userPersistenceManager);

    // Act
    dataManager.GetUserByUserNumber("123456", false);

    // Assert
    A.CallTo(() => userPersistenceManager.ReadCustom(u => u.UserNumber == "123456", EntityConstants.EntityNames.UserDetail)).MustHaveHappened();
}
4

2 に答える 2