Unit testing 如何模拟autofac';自动生成的代理工厂?

Unit testing 如何模拟autofac';自动生成的代理工厂?,unit-testing,moq,autofac,Unit Testing,Moq,Autofac,我正在努力让一个单元测试为我的一个类工作。我希望注入我的工厂,而不是autofac解析为的自动生成工厂。如何将自己的函数注册为代理以替换自动生成的代理工厂 我的代码类似于以下的大纲形式: interface IEntryImporter { ... } class EntryImporter : IEntryImporter { public EntryImporter(ISeries series, IMatch match, Entry.Factory entryFactory)

我正在努力让一个单元测试为我的一个类工作。我希望注入我的工厂,而不是autofac解析为的自动生成工厂。如何将自己的函数注册为代理以替换自动生成的代理工厂

我的代码类似于以下的大纲形式:

interface IEntryImporter { ... }

class EntryImporter : IEntryImporter {
    public EntryImporter(ISeries series, IMatch match, Entry.Factory entryFactory) {
        :
    }
    :
}

interface IEntry : { ... }
class Entry : IEntry {
    public delegate IEntry Factory();
    public Entry() { ... }
}

interface IMatch : { ... }
class Match : IMatch { ... }

interface ISeries : { ... }
class Series : ISeries { ... }

void IEntry MyEntryFactory() {
    var entry = new Mock<IEntry>();
    :
    return entry.Object;
}

void TestMe() {
    ContainerBuilder builder = new ContainerBuilder();
    builder.RegisterType<Entry>().As<IEntry>();
    builder.RegisterType<Match>().As<IMatch>();
    builder.RegisterType<Series>().As<ISeries>();
    builder.RegisterType<EntryImporter>.As<IEntryImporter>();

    var series = new Mock<ISeries>(MockBehavior.Strict);
    builder.RegisterInstance<ISeries>(series.Object);

    var match = new Mock<IMatch>(MockBehavior.Strict);
    builder.RegisterInstance<IMatch>(match.Object);

    // How to register MyEntryFactory as Entry.Factory for autofac to resolve?

    using(var container = builder.Build()) {
        var importer = container.Resolve<IEntryImporter>();
        :
    }
}
接口IEntryImporter{…}
类EntryImporter:EntryImporter{
公共入口导入器(ISeries、IMatch匹配、Entry.Factory入口工厂){
:
}
:
}
接口地址:{…}
课程名称:IEntry{
公共委托代理工厂();
公共条目(){…}
}
接口IMatch:{…}
类匹配:IMatch{…}
接口ISeries:{…}
类系列:ISeries{…}
void Entry MyEntryFactory(){
var entry=newmock();
:
返回条目。对象;
}
void TestMe(){
ContainerBuilder=新的ContainerBuilder();
builder.RegisterType().As();
builder.RegisterType().As();
builder.RegisterType().As();
builder.RegisterType.As();
var系列=新的模拟(MockBehavior.Strict);
builder.RegisterInstance(series.Object);
var match=newmock(MockBehavior.Strict);
builder.RegisterInstance(match.Object);
//如何将MyEntryFactory注册为Entry.Factory以供autofac解决?
使用(var container=builder.Build()){
var importer=container.Resolve();
:
}
}

您可以注册自己的方法作为模拟输入工厂,如下所示:

builder.Register(c=>MyEntryFactory.As();
我把它作为我的一部分