2

我有代理,它将读取目录 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 实际使用我的容器进行依赖注入

4

0 回答 0