簡體   English   中英

Moq模擬通用類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM