在Akka.net中正确的TDD +依赖注入

时间:2016-08-08 10:58:01

标签: dependency-injection akka.net akka-testkit

我有和Agent,它将读取目录X并为它找到的每个子目录创建子代理。

为了我的测试环境,我使用了System.IO.Abstractions包来创建IFileSystem接口及其实现(正常程序使用)。

代理(对于dir X)使用Autofac DI来创建子代理(因为我们需要赋予它们IFileSystem依赖性,并且将来可能还有更多):

var props = Context.DI().Props<DirectoryReader>();
var directoryAgent = Context.ActorOf(props, "DirectoryReader");

我的测试看起来像这样:

public class DirectoryReaderTests : Akka.TestKit.Xunit2.TestKit 
{
    public DirectoryReaderTests()
        : base(@"akka.loglevel = DEBUG")
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<FileSystem>().As<IFileSystem>();

        var container = builder.Build();  // <--- how do I use this with TestKit
    }

    [Fact]
    public void CreatesAgentForEachSubdirectory()
    {
        EventFilter.Info()
            .Expect(3, () => GetTargetAgent(ExistingDirPath));
    }

    private TestActorRef<DirectoryReader> GetTargetAgent(string path)
    {
        var filesystem = GetMockFileSystem();
        var target = ActorOfAsTestActorRef<DirectoryReader>(
            Props.Create(
                () =>
                    new DirectoryReader(
                        databaser,
                        filesystem.Object
                        )));
        target.Tell(new HashDirectory(path));
        return target;
    }
}

现在的问题是:如何告诉TestKit实际使用我的容器进行依赖注入

0 个答案:

没有答案