簡體   English   中英

如何指定Intellitest應該用於接口的工廠?

[英]How do I specify the factory Intellitest should use for an interface?

使用Intellitest,您可以在生成單元測試時為Intellitest指定一個適合接口的類型,但是我有一個我希望使用的自定義工廠。

我的定制工廠:

public static partial class LogicFactory
{
    /// <summary>A factory for ILogic instances</summary>
    [PexFactoryMethod(typeof(ILogic))]
    public static ILogic Create(string defaultUICulture, bool saveSuccessful)
    {
        return Mock.Of<ILogic>(
        x =>
        x.GetUICulture(It.IsAny<string>()) == defaultUICulture &&
        x.Save(It.IsAny<string>(), It.IsAny<string>()) == saveSuccessful);
    }
}

我想將這個工廠用於PEX嘗試創建的所有ILogic實例。

我嘗試將以下屬性添加到PexAssemblyInfo.cs,我也嘗試將其添加到我的測試之上:

[assembly: PexCreatableByClassFactory(typeof(ILogic), typeof(LogicFactory))]

但在檢測代碼時我仍然會收到此運行時警告:

will use Company.Logics.SpecificLogic as ILogic

所以似乎每次都忽略了我的工廠。 我怎樣才能強迫Intellitest使用我的工廠呢?

如果要使用PexCreatableByClassFactory ,則需要一個實現IPexClassFactory接口的類。 這是一個例子:

public partial class LogicFactory : IPexClassFactory<Logic>
{
    public Logic Create()
    {
        //...
    }
}

[assembly: PexCreatableByClassFactory(typeof(Logic), typeof(LogicFactory))]

應該注意的是, IPexClassFactory使用具體類而不是接口。 現在,如果Pex決定應該創建Logic類的實例,那么將生成以下代碼:

LogicFactory2 s2 = new LogicFactory();
Logic s1 = ((IPexClassFactory<Logic>)s2).Create();

如果您更喜歡使用PexFactoryMethod ,也可以使用。 但是, PexFactoryMethod也適用於具體類,例如:

 [PexFactoryMethod(typeof(Logic))]
 public static Logic Create(string defaultUICulture, bool saveSuccessful)
 {
      //...
 }

如果您同時使用兩種解決方案,即為同一類型定義pex工廠方法和pex工廠類,那么根據我的經驗,pex工廠方法將具有更高的優先級。

如果您有多個實現ILogic接口的類,則需要為每個類定義一個pex工廠方法和/或一個pex工廠類。 否則,PEX將嘗試自己創建這些類的實例。

如果要刪除上述警告,請右鍵單擊它並從上下文菜單中選擇“ 修復” Pex將為您生成以下屬性:

[assembly: PexUseType(typeof(SpecificLogic))]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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