Пример #1
0
 internal UnitTestFramework(
     ISutCreator sutCreator,
     ITellWaiter tellWaiter,
     IWaiter childWaiter,
     IWaiter exceptionWaiter,
     IDependencyResolverAdder resolverAdder,
     ITestProbeDependencyResolverAdder testProbeDependencyResolverAdder,
     ITestProbeCreator testProbeCreator,
     IResolvedTestProbeStore resolvedProbeStore,
     ITestProbeChildActorCreator testProbeChildActorCreator,
     ITestProbeChildHandlersMapper testProbeChildHandlersMapper,
     ISutSupervisorStrategyGetter sutSupervisorStrategyGetter,
     ITestProbeParentActorCreator testProbeParentActorCreator,
     IDelayer delayer,
     ImmutableDictionary <Type, Func <object, object> > parentHandlers,
     ImmutableDictionary <(Type, Type), Func <object, object> > childHandlers,
 public void Add(
     IDependencyResolverAdder dependencyResolverAdder,
     ITestProbeChildActorCreator testProbeChildActorCreator,
     ITestProbeCreator testProbeCreator,
     IResolvedTestProbeStore resolvedTestProbeStore,
     IWaiter childWaiter,
     TestKitBase testKit,
     ImmutableDictionary <Type, ImmutableDictionary <Type, Func <object, object> > > handlers) =>
 dependencyResolverAdder.Add(testKit, actorType =>
 {
     ImmutableDictionary <Type, Func <object, object> > actorHandlers = handlers.GetValueOrDefault(actorType, null);
     ITestProbeChildActor probeActor = testProbeChildActorCreator.Create(testProbeCreator, testKit, actorHandlers);
     resolvedTestProbeStore.ResolveProbe(probeActor.ActorPath, actorType, probeActor.TestProbe, probeActor.PropsSupervisorStrategy);
     childWaiter.ResolveEvent();
     return(probeActor.Actor);
 });
Пример #3
0
        public TestBase() : base(AkkaConfig.Config)
        {
            Func <Type> generateType = TestHelper.GetRandomTypeGenerator();

            // Create mocks
            SutCreatorMock                       = new Mock <ISutCreator>();
            TellWaiterMock                       = new Mock <ITellWaiter>();
            ChildWaiterMock                      = new Mock <IWaiter>();
            ExceptionWaiterMock                  = new Mock <IWaiter>();
            DependencyResolverAdderMock          = new Mock <IDependencyResolverAdder>();
            TestProbeDependencyResolverAdderMock = new Mock <ITestProbeDependencyResolverAdder>();
            ResolvedTestProbeStoreMock           = new Mock <IResolvedTestProbeStore>();
            TestProbeChildActorCreatorMock       = new Mock <ITestProbeChildActorCreator>();
            TestProbeCreatorMock                 = new Mock <ITestProbeCreator>();
            TestProbeHandlersMapperMock          = new Mock <ITestProbeChildHandlersMapper>();
            TestProbeChildActorMock              = new Mock <ITestProbeChildActor>();
            SutSupervisorStrategyGetterMock      = new Mock <ISutSupervisorStrategyGetter>();
            TestProbeParentActorCreatorMock      = new Mock <ITestProbeParentActorCreator>();
            TestProbeParentActorMock             = new Mock <ITestProbeParentActor>();
            DelayerMock = new Mock <IDelayer>();

            // Create objects passed into sut constructor
            SutCreator                       = SutCreatorMock.Object;
            TellWaiter                       = TellWaiterMock.Object;
            ChildWaiter                      = ChildWaiterMock.Object;
            ExceptionWaiter                  = ChildWaiterMock.Object;
            DependencyResolverAdder          = DependencyResolverAdderMock.Object;
            TestProbeDependencyResolverAdder = TestProbeDependencyResolverAdderMock.Object;
            TestProbeCreator                 = TestProbeCreatorMock.Object;
            ResolvedTestProbeStore           = ResolvedTestProbeStoreMock.Object;
            TestProbeChildActorCreator       = TestProbeChildActorCreatorMock.Object;
            TestProbeHandlersMapper          = TestProbeHandlersMapperMock.Object;
            SutSupervisorStrategyGetter      = SutSupervisorStrategyGetterMock.Object;
            TestProbeParentActorCreator      = TestProbeParentActorCreatorMock.Object;
            Delayer        = DelayerMock.Object;
            ParentHandlers = ImmutableDictionary <Type, Func <object, object> >
                             .Empty
                             .Add((generateType()), message => TestHelper.Generate <object>());

            ChildHandlers = ImmutableDictionary <(Type, Type), Func <object, object> >
                            .Empty
                            .Add((generateType(), generateType()), message => TestHelper.Generate <object>());

            Decider = exception => TestHelper.GenerateEnum <Directive>();
            Props   = Props.Create <DummyActor>();
            PropsWithSupervisorStrategy = Props
                                          .Create <DummyActor>()
                                          .WithSupervisorStrategy(new AllForOneStrategy(
                                                                      TestHelper.GenerateNumber(),
                                                                      TestHelper.GenerateNumber(),
                                                                      exception => TestHelper.Generate <Directive>()));
            ExpectedChildCount     = TestHelper.GenerateNumber();
            ExpectedExceptionCount = TestHelper.GenerateNumber();

            // Create objects passed into sut methods
            Message   = TestHelper.Generate <object>();
            ChildName = TestHelper.GenerateString();
            ChildNameWithoutSupervisor = TestHelper.GenerateString();
            Sender        = new Mock <IActorRef>().Object;
            DelayDuration = TestHelper.Generate <TimeSpan>();

            // Create objects returned by mocks
            MappedChildHandlers = ImmutableDictionary <Type, ImmutableDictionary <Type, Func <object, object> > >
                                  .Empty
                                  .Add(generateType(), ImmutableDictionary <Type, Func <object, object> >
                                       .Empty
                                       .Add(generateType(), mess => TestHelper.Generate <object>()));

            SutActor                   = ActorOfAsTestActorRef <DummyActor>();
            ResolvedType               = generateType();
            ResolvedTestProbe          = CreateTestProbe();
            ResolvedSupervisorStrategy = new AllForOneStrategy(
                TestHelper.GenerateNumber(),
                TestHelper.GenerateNumber(),
                exception => TestHelper.Generate <Directive>());
            SutSupervisorStrategy = new OneForOneStrategy(
                TestHelper.GenerateNumber(),
                TestHelper.GenerateNumber(),
                exception => TestHelper.Generate <Directive>());
            TestProbeParentActor                    = TestProbeParentActorMock.Object;
            TestProbeParentActorTestProbe           = CreateTestProbe();
            TestProbeParentActorRef                 = TestProbeParentActorTestProbe.Ref;
            TestProbeParentActorUnhandledExceptions = TestHelper.GenerateMany <Exception>(() => TestHelper.GenerateException());

            // Set up mocks
            TestProbeParentActorMock
            .SetupGet(actor => actor.Ref)
            .Returns(TestProbeParentActorRef);
            TestProbeParentActorMock
            .SetupGet(actor => actor.TestProbe)
            .Returns(TestProbeParentActorTestProbe);
            TestProbeParentActorMock
            .SetupGet(actor => actor.UnhandledExceptions)
            .Returns(TestProbeParentActorUnhandledExceptions);

            TestProbeParentActorCreatorMock
            .SetupSequence(creator => creator.Create(TestProbeCreator, ExceptionWaiter, this, Decider, ParentHandlers))
            .Returns(TestProbeParentActor)
            .Returns(Mock.Of <ITestProbeParentActor>());

            SutCreatorMock
            .Setup(creator => creator.Create <DummyActor>(
                       ChildWaiterMock.Object,
                       this,
                       Props,
                       ExpectedChildCount,
                       TestProbeParentActorRef))
            .Returns(() => SutActor);

            ResolvedTestProbeStoreMock
            .Setup(store => store.FindResolvedType(SutActor, ChildName))
            .Returns(() => ResolvedType);
            ResolvedTestProbeStoreMock
            .Setup(store => store.FindResolvedTestProbe(SutActor, ChildName))
            .Returns(() => ResolvedTestProbe);
            ResolvedTestProbeStoreMock
            .Setup(store => store.FindResolvedSupervisorStrategy(SutActor, ChildName))
            .Returns(() => ResolvedSupervisorStrategy);
            ResolvedTestProbeStoreMock
            .Setup(store => store.FindResolvedSupervisorStrategy(SutActor, ChildNameWithoutSupervisor))
            .Returns(() => null);

            TestProbeHandlersMapperMock
            .Setup(mapper => mapper.Map(ChildHandlers))
            .Returns(() => MappedChildHandlers);

            SutSupervisorStrategyGetterMock
            .Setup(getter => getter.Get(SutActor.UnderlyingActor))
            .Returns(() => SutSupervisorStrategy);
        }
Пример #4
0
        public TestBase() : base(AkkaConfig.Config)
        {
            Func <Type> generateType = TestHelper.GetRandomTypeGenerator();

            // Create mocks
            DependencyResolverAdderMock    = new Mock <IDependencyResolverAdder>();
            TestProbeChildActorCreatorMock = new Mock <ITestProbeChildActorCreator>();
            TestProbeCreatorMock           = new Mock <ITestProbeCreator>();
            ResolvedTestProbeStoreMock     = new Mock <IResolvedTestProbeStore>();
            ChildWaiterMock = new Mock <IWaiter>();
            TestProbeChildActorWithHandlersMock    = new Mock <ITestProbeChildActor>();
            TestProbeChildActorWithoutHandlersMock = new Mock <ITestProbeChildActor>();

            // Create objects used by mocks
            CallOrder = new List <string>();

            // Create objects passed into ActorFactory
            ActorWithHandlersType    = generateType();
            ActorWithoutHandlersType = generateType();

            // Create objects passed into sut methods
            DependencyResolverAdder    = DependencyResolverAdderMock.Object;
            TestProbeChildActorCreator = TestProbeChildActorCreatorMock.Object;
            TestProbeCreator           = TestProbeCreatorMock.Object;
            ResolvedTestProbeStore     = ResolvedTestProbeStoreMock.Object;
            ChildWaiter   = ChildWaiterMock.Object;
            ActorHandlers = ImmutableDictionary <Type, Func <object, object> >
                            .Empty
                            .Add(generateType(), mess => TestHelper.Generate <object>());

            Handlers = ImmutableDictionary <Type, ImmutableDictionary <Type, Func <object, object> > >
                       .Empty
                       .Add(ActorWithHandlersType, ActorHandlers);

            // Create values returned by mocks
            ResolvedActorWithHandlers              = new Mock <ActorBase>().Object;
            ResolvedActorPathWithHandlers          = TestHelper.Generate <ActorPath>();
            ResolvedTestProbeWithHandlers          = CreateTestProbe();
            ResolvedSupervisorStrategyWithHandlers = new AllForOneStrategy(
                TestHelper.GenerateNumber(),
                TestHelper.GenerateNumber(),
                exception => TestHelper.Generate <Directive>());

            ResolvedActorWithoutHandlers              = new Mock <ActorBase>().Object;
            ResolvedActorPathWithoutHandlers          = TestHelper.Generate <ActorPath>();
            ResolvedTestProbeWithoutHandlers          = CreateTestProbe();
            ResolvedSupervisorStrategyWithoutHandlers = new OneForOneStrategy(
                TestHelper.GenerateNumber(),
                TestHelper.GenerateNumber(),
                exception => TestHelper.Generate <Directive>());

            // Set up mocks
            TestProbeChildActorWithHandlersMock
            .Setup(actor => actor.Actor)
            .Returns(() => ResolvedActorWithHandlers);

            TestProbeChildActorWithHandlersMock
            .Setup(actor => actor.ActorPath)
            .Returns(() => ResolvedActorPathWithHandlers);

            TestProbeChildActorWithHandlersMock
            .Setup(actor => actor.TestProbe)
            .Returns(() => ResolvedTestProbeWithHandlers);

            TestProbeChildActorWithHandlersMock
            .Setup(actor => actor.PropsSupervisorStrategy)
            .Returns(() => ResolvedSupervisorStrategyWithHandlers);

            TestProbeChildActorWithoutHandlersMock
            .Setup(actor => actor.Actor)
            .Returns(() => ResolvedActorWithoutHandlers);

            TestProbeChildActorWithoutHandlersMock
            .Setup(actor => actor.ActorPath)
            .Returns(() => ResolvedActorPathWithoutHandlers);

            TestProbeChildActorWithoutHandlersMock
            .Setup(actor => actor.TestProbe)
            .Returns(() => ResolvedTestProbeWithoutHandlers);

            TestProbeChildActorWithoutHandlersMock
            .Setup(actor => actor.PropsSupervisorStrategy)
            .Returns(() => ResolvedSupervisorStrategyWithoutHandlers);

            TestProbeChildActorCreatorMock
            .Setup(creator => creator.Create(TestProbeCreator, this, ActorHandlers))
            .Returns(() => TestProbeChildActorWithHandlersMock.Object);

            TestProbeChildActorCreatorMock
            .Setup(creator => creator.Create(TestProbeCreator, this, null))
            .Returns(() => TestProbeChildActorWithoutHandlersMock.Object);

            ResolvedTestProbeStoreMock
            .Setup(store => store.ResolveProbe(It.IsAny <ActorPath>(), It.IsAny <Type>(), It.IsAny <TestProbe>(), It.IsAny <SupervisorStrategy>()))
            .Callback(() => CallOrder.Add(nameof(IResolvedTestProbeStore.ResolveProbe)));

            ChildWaiterMock
            .Setup(waiter => waiter.ResolveEvent())
            .Callback(() => CallOrder.Add(nameof(IWaiter.ResolveEvent)));

            DependencyResolverAdderMock
            .Setup(adder => adder.Add(this, It.IsAny <Func <Type, ActorBase> >()))
            .Callback((TestKitBase testKit, Func <Type, ActorBase> actorFactory) => ActorFactory = actorFactory);
        }