2012-03-05 83 views
0

我正在尝试在Moq中使用IHTMLSelectElement。我的代码是这样的:Moq - 对象类型转换和比较

// create a select element 
var selectElem = new Mock<IHTMLSelectElement>(MockBehavior.Strict); 
// set the select element 
selectElem.Setup(f => f.length).Returns(20); 
selectElem.Setup(f => f.name).Returns("selectElem");    
// get the object 
IHTMLSelectElement ihse = selectElem.Object; 

然后在我的生产代码的方法,我做的事:

var selectEle = (element as mshtml.IHTMLSelectElement); 
if (selectEle != null) 
{ 

我的问题是,类型转换不起作用,因为使用起订量时的类型实际上是: Castle.Proxies.IHTMLSelectElementProxy_1

将此转换为IHTMLSelectElement将返回一个空对象。

关于如何使这项工作有任何想法?

+1

你的代码肯定应该工作,因为你的接口类型的模拟对象是。 – 2012-03-05 18:59:06

+0

但'IHTMLSelectElementProxy_1'继承自'IHTMLSelectElementProxy',对吧?你可以做'IHTMLSelectElement ihse = selectElem.Object;'。这让我觉得演员不是你的问题。 – 2012-03-05 18:59:14

+0

你可以显示'ihse'模拟注入你的生产类的代码吗? – 2012-03-05 19:08:00

回答

1

根据代码的不同,您需要将其注入,方法的属性或输入参数。然后你可以注入最小起订量对象。你的两行代码不应该在做"as",它应该直接处理正确的元素类型。