Пересчет базовой валюты 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);
}
Другие вопросы по тегам