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