Как выполнить исправление и макет getLogger
в этом тестируемом модуле (MUT):
# Start of the module under test
import logging
log = logging.getLogger('some_logger')
# ...
Я бы хотел сделать:
mock_logging.getLogger.return_value = Mock()
Однако я не могу создать mock _ logging
перед импортом MUT, но импорт MUT уже вызывает getLogger
...
-121--1696313-
Я не очень хорошо разбираюсь в манипулировании массивом в PHP, поэтому у меня есть простой вопрос портирования. В C++ I имеет карту std:: map
, для которой неявное упорядочение по ключу является важной частью структуры. Что я хочу сделать, так это суммировать все значения для начального диапазона клавиш, которые я делаю так:
// accumulate helper, since "value_type" is "pair"
int pair_adder(int n, const std::map::value_type & p) { return n + p.second; }
// To add up values for keys up to N:
int total_value_up_to_time_N(int N)
{
return std::accumulate(mymap.begin(), mymap.upper_bound(N), 0, pair_adder);
}
Что было бы идиоматическим способом записи этой структуры данных и накопителя в PHP?
Объяснить контекст: Структура данных представляет собой простой временной ряд, и я хочу знать, сколько я накопил за время N
. Карта C++
всегда сортируется по ключу, поэтому я могу добавить элементы mymap [time] = value;
в любом порядке, и карта всегда содержит элементы во временном порядке.
Чтобы объяснить накопление: Функция накопления
суммирует все значения карты, ключи которых не больше N
. Например, возьмем эту карту:
mymap = { { 1, 20}, {2, 30}, {3, -10}, {4, 15} };
Тогда для N = 2
я накапливаю 50, для N = 3
я накапливаю 40, и для N = 12
я накапливаю 55.
Обновление: Я только что понял, что на самом деле нет причин, почему каждая временная метка должна встречаться только один раз, поэтому структура данных действительно должна быть std:: multimap
. Та же функция накопления работает дословно, но если решение PHP требует времени, чтобы быть ключом массива, то это больше не сработает. Но это не очень важно; Я считаю, что решения, в котором каждый раз требуется быть уникальным, будет достаточно.