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