У меня есть и агент, который будет читать каталог X и создавать дочерний агент для каждого найденного подкаталога.
Для моей тестовой среды я использовал пакет System.IO.Abstractions, который создает интерфейс IFileSystem и его реализацию (для обычного использования программы).
Агент (для каталога 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, чтобы он действительно использовал мой контейнер для внедрения зависимостей?