Ответ Servy был правильным, мне нужно было изменить мой общий DbSet на следующий, и подсчет сработал:
public static DbSet<T> MockDbSet<T>(params T[] items) where T : class
{
IEnumerable<T> ts = items;
var mock = new Mock<DbSet<T>>();
mock.As<IQueryable<T>>().Setup(x => x.GetEnumerator()).Returns(ts.GetEnumerator());
mock.As<IQueryable<T>>().Setup(x => x.Provider).Returns(items.AsQueryable().Provider);
mock.As<IQueryable<T>>().Setup(x => x.Expression).Returns(items.AsQueryable().Expression);
mock.As<IQueryable<T>>().Setup(x => x.ElementType).Returns(items.AsQueryable().ElementType);
return mock.Object;
}
Я нахожу много #defines, с которыми Вы встречаетесь, после того как Вы включали windows.h очень тревожащий (не только макс. и минута, но и у меня также были проблемы с другими универсальными словами как Прямоугольник, если я не ошибаюсь). Поэтому я разработал привычку включать windows.h только при необходимости, и никогда в заголовочных файлах. Это уменьшает боль до небольшого количества файлов C++, которые являются определенными для платформы.
К сожалению, некоторые библиотеки повышения (я верю потоку, и asio) действительно включают windows.h в их заголовки, и я все еще сталкиваюсь с этим видом глупых проблем время от времени.
Моим решением для остатка от ситуаций, где это вызывает проблемы, являются к #undef проблематичные символы после включения заголовочных файлов.
Это - названный макрос max
это входит в путь, как Adam объяснил. Другое решение (больше "текущие исправления") может состоять в том, чтобы поместить круглые скобки вокруг функции, препятствовать тому, чтобы она рассматривалась как макро-вызов:
return std::log((std::numeric_limits<result_type>::max)());
Поскольку другие отметили, включая windows.h
вероятно, Ваша проблема. Microsoft обеспечивает средство "выключить" части windows.h
с символами препроцессора. Можно определить эти символы как часть сборки или непосредственно в коде.
Используя символы препроцессора для условного пропуска разделов windows.h
май или нельзя считать изящным, но в общем случае это - более легкое, более общее и больше масштабируемого решения, чем #undef
.
Вот то, как пропустить определение min
или max
как макросы:
#define NOMINMAX
#include <windows.h>
Обратите внимание, что многие включают файлы, будет, в какой-то момент, включать windows.h
. В таких случаях, настраивающих Ваш, определяет на более глобальном уровне, может быть более удобным.
Если Вы перерываете windows.h
, можно найти набор других символов препроцессора (например, NOOPENFILE
, NOKANJI
, NOKERNEL
и многие другие), который может часто быть полезным.
Вы включаете заголовочный файл где-нибудь это #define
s max
как макрос. Лучшее решение состояло бы в том, чтобы выяснить, где оно определяется, и запретите ему то, чтобы быть определенным, если это возможно. С другой стороны, Вы могли просто #undef
это:
#include <evil_header_which_defines_max.h>
#undef max