首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何指定接口应使用的工厂Intellitest?

如何指定接口应使用的工厂Intellitest?
EN

Stack Overflow用户
提问于 2016-02-24 14:38:04
回答 1查看 1.2K关注 0票数 8

使用Intellitest,您可以为Intellitest指定一种类型,用于生成单元测试时适合接口的类型,但是,我有一个自定义工厂,我希望用它来代替。

我的定制工厂:

代码语言:javascript
复制
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);
    }
}

我想使用这个工厂为所有的ILogic实例,PEX试图创建。

我尝试将以下属性添加到PexAssemblyInfo.cs中,并且尝试将其添加到测试之上:

代码语言:javascript
复制
[assembly: PexCreatableByClassFactory(typeof(ILogic), typeof(LogicFactory))]

但是,在测试代码时,我仍然会收到运行时的警告:

will use Company.Logics.SpecificLogic as ILogic

所以似乎每次都忽略我的工厂。我如何强迫Intellitest使用我的工厂呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-04 10:08:00

如果您想使用PexCreatableByClassFactory,您需要一个实现IPexClassFactory接口的类。下面是一个示例:

代码语言:javascript
复制
public partial class LogicFactory : IPexClassFactory<Logic>
{
    public Logic Create()
    {
        //...
    }
}

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

应该注意的是,IPexClassFactory使用的是具体的类,而不是接口。现在,如果Pex决定创建Logic类的实例,将生成以下代码:

代码语言:javascript
复制
LogicFactory2 s2 = new LogicFactory();
Logic s1 = ((IPexClassFactory<Logic>)s2).Create();

如果您喜欢使用PexFactoryMethod,这也是可能的。然而,PexFactoryMethod也适用于具体的类,例如:

代码语言:javascript
复制
 [PexFactoryMethod(typeof(Logic))]
 public static Logic Create(string defaultUICulture, bool saveSuccessful)
 {
      //...
 }

如果同时使用这两种解决方案,即为同一类型定义pex工厂方法和pex工厂类,那么根据我的经验,pex工厂方法将具有更高的优先级。

如果有多个实现ILogic接口的类,则需要为每个类定义一个pex工厂方法和/或一个pex工厂类。否则,PEX将尝试自己创建这些类的实例。

如果您想去掉前面提到的警告,右键单击它,然后从上下文菜单中选择Fix。Pex将为您生成以下属性:

代码语言:javascript
复制
[assembly: PexUseType(typeof(SpecificLogic))]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35605072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档