2011-09-07 2 views
2

조롱 I MOQ에 대해 다음 설정이 있습니다MOQ -하여 Dictionary <문자열 두 번> 객체

... 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 

innerMoq에 ContainsKey을 지원하기 위해 권장되는 방법은 무엇입니까?

+2

'Dictionary '을 사용하지 않는 이유는 무엇입니까? – driis

답변

6

ContainsKey에 대한 기대치를 설정하지 않았기 때문입니다. 수동으로 설정해야 할 필요가 있습니다. Moq는 인터페이스의 의미를 전혀 모릅니다. 이 경우

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

그러나, 당신이 필요 IDictionary, 왜 조롱 프레임 워크를 통해 이동? 필요한 객체가있는 Dictionary<string,double>을 만드십시오.

+0

감사합니다. 나는 Moq를 사용하는 데 지나치게 열중했다. 사전을 만드는 대신 완벽하게 작동했습니다. – Shawn