Пересчет базовой валюты Dynamics 365 money fields в модульных тестах fakexrmeasy
Я новичок в Dynamics 365 и недавно начал тестировать свой код с помощью поддельного XRM.
Я только что столкнулся с проблемой, связанной с расчетами, выполняемыми в полях валюты (Деньги), для которых создается дополнительное поле (имя которого заканчивается на _Base). В модульных тестах база денежного поля не пересчитывается.
Сценарий следующий: - Тестируемый код устанавливает поле "оборот" типа "Деньги" в сущности "Счет". - Позже "оборотные" части базовой валюты суммируются. (Аккаунты обновляются в контексте перед подведением итогов)
localAccount.turnover = new Money(100);
...
var sumOfTurnovers = localAccounts.Sum(s => s.turnover_Base?.Value ?? 0); // <-- returns 0 in unit tests
Результат: сумма оборотов рассчитывается как 0, в то время как в реальной среде разработки она рассчитывается правильно.
Часто бывает, что тестируемый код полагается на пересчитанные значения.
Как эмулировать пересчет таких полей базовой валюты в модульных тестах?
0 ответов
Это поведение не эмулируется FakeXrmEasy. Вероятно, потому что это зависит от окружающей среды - от того, какая валюта является базовой и какой курс обмена.
В зависимости от того, чего вы пытаетесь достичь, вам нужно будет заранее вычислить поля базовой валюты во время организации контекста. Что-то вроде
SetMoneyField(string fieldName, decimal amount, decimal exchangeRate) {
SetAttributeValue(fieldName, amount);
SetAttributeValue(fieldName+"_base", amount*exchangeRate);
}