我正在尝试学习如何使用 FakeItEasy,并想尝试将它与我有权访问的旧项目中的一些数据访问代码一起使用。虽然 FIE 的基础知识看起来很简单,而且我能够处理简单的案例,但这让我很难过。
该系统使用实体框架,其中一个数据管理类处理用户,我试图弄清楚如何仅测试基本GetUserByUserNumber
功能。我可以在实例化 UserDataManager 类时使用假IPersistenceManager<User>
的,然后调用该GetUserByUserNumber
方法,但是检查userPersistenceManager.ReadCustom
被调用的断言总是失败。
我尝试在 fake 上调用 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();
}