MOQ - макет объекта Dictionary <string, double> - PullRequest
2 голосов
/ 07 сентября 2011

У меня есть следующие настройки для Moq:

... other code to setup bigMoq object ...
var innerMoq = new Mock<IDictionary<string, double>>();
innerMoq.SetupGet(d => d["COMPLEX"]).Returns(6d);
innerMoq.SetupGet(d => d["MEDIUM"]).Returns(8d);
innerMoq.SetupGet(d => d["SIMPLE"]).Returns(10d);
bigMoq.SetupGet(d => d.ComplexityWeights).Returns(x.Object);

При запуске метода теста я передаю в качестве аргумента bigMoq.

Следующие работы:

bigMoqVar.ComplexityWeights["COMPLEX"] // correctly returns 6

Однако это не так:

bigMoqVar.ComplexityWeights.ContainsKey("COMPLEX")  // returns false instead of true

Каков рекомендуемый способ поддержки ContainsKey для innerMoq?

1 Ответ

6 голосов
/ 07 сентября 2011

Это потому, что вы не настроили ожидание для ContainsKey.Вам нужно будет настроить это вручную, Moq не знает о семантике интерфейса.

innerMoq.Setup(d => d.ContainsKey("COMPLEX")).Returns(true);

Однако, если вам нужен только IDictionary, зачем переходить через фреймворк?Просто создайте Dictionary<string,double> с нужными вам объектами.

...