[英]Moq mock generic class
在我的代碼中包含以下內容:
var contact = m_someFactory.Create<IContact>(contact, Page.ID);
工廠代碼:
ObjectFactory實現AbstractFactory
ObjectsFactory : AbstractFactory
{
public T Create<T>()
{
var factory = this as IInsertFactoryMethod<T>;
return factory != null
? factory.Create()
: default(T);
}
我希望能夠模擬這個。 我創建了一個實現IContact的類
public class Contact{
public Name {get; set;}
IOrganization Organization { get; set; }
}
對於安裝程序,我嘗試了此操作:
FactoryMock = new Mock<ObjectsFactory>();
FactoryMock.Setup(x => x.Create<IContact>()).Returns(new Mock<IContact>().Object);
和這個
FactoryMock.Setup(x => x.Create<IContact>(null, It.IsAny<int>())).Returns(new Mock<IContact>().Object);
在安裝過程中,我得到以下信息:
附加信息:在非虛擬(在VB中可重寫)成員上的無效設置:x => x.Create()
我究竟做錯了什么?
更新:在我的代碼中,我有以下內容:
var contact = m_someFactory.Create<IContact>(contact, Page.ID);
var organization = contact.Organization;
如果組織是Contact中的界面,我將如何設置?
您無法Setup
Moq中非虛擬的方法 。 在這里, Factory.Create
未標記為虛擬。
更改Create
的簽名使其虛擬,可以使模擬按照您的預期工作,但是通常比模擬界面更好,而不是具體的。 這說明了一個原因:您正在更改實現以使其可用於您的測試框架。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.