Я пытаюсь узнать, как использовать FakeItEasy, и хотел попробовать использовать его с некоторым кодом доступа к данным из старого проекта, к которому у меня есть доступ. В то время как основы FIE казались довольно простыми, и я смог заставить работать простые случаи, этот случай поставил меня в тупик.
В системе используется 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);
Это мой модульный тест:
[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();
}