我有和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实际使用我的容器进行依赖注入