Я пытаюсь использовать научиться использовать FakeItEasy и хотел попробовать использовать его с некоторым кодом доступа к данным из старого проекта, к которому у меня есть доступ. В то время как основы FIE казались довольно легкими, и я смог получить простые случаи работы, у меня есть я в тупике.Использование FakeItEasy с параметром выражения Linq
В системе используется Entity Framework, и один из классов управления данными обрабатывает пользователей, и я пытаюсь выяснить, как протестировать только базовую функцию GetUserByUserNumber
. Я могу использовать подделку IPersistenceManager<User>
при создании экземпляра класса UserDataManager, а затем вызвать метод GetUserByUserNumber
, но утверждение, что было вызвано userPersistenceManager.ReadCustom
, всегда терпит неудачу.
Я пробовал называть метод Delete на подделке userPersistenceManager
, и утверждение для этого отлично работает. Я думаю, что это имеет какое-то отношение к выражению Linq, которое в качестве первого параметра принимает метод ReadCustom
. Я просто не знаю, как это должно быть обработано. Любая помощь с этим будет оценена!
Это метод в 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);
Это мой блок test:
[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();
}