Как смоделировать методы объекта в обработчике зависимостей? - PullRequest
0 голосов
/ 19 февраля 2019

У меня настроен класс NinjectdependencyResolver, который внедряет мой IStationKpiRepository.Поскольку у меня недостаточно данных, я пытаюсь смоделировать этот объект и внедрить его через мой NinjectdependencyResolver.Но в результате я просто получаю нулевое значение.

Может ли кто-нибудь помочь мне с этим?

Вот интерфейс объекта, который я пытаюсь смоделировать:

    {
        public interface IStationKpiRepository
        {
            /// <summary>
            /// Gets the kpi computed over a period of time for one station.
            /// </summary>
            Kpi StationKpi(int StationHandle, DateTime StartDate, DateTime EndDate);

            /// <summary>
            /// Gets the daily kpi over a period of time for one station.
            /// </summary>
            IEnumerable<Kpi> StationKpiHistory(int StationHandle, DateTime StartDate, DateTime EndDate);

    }

Вот класс NinjectDependencyResolver:

namespace MyApp.WebUI.Infrastructure
{
    /// <summary>
    /// The NinjectDependencyResolver class.
    /// </summary>
    public class NinjectDependencyResolver : IDependencyResolver
    {
            private IKernel kernel;

        public NinjectDependencyResolver(IKernel kernelParam)
        {
            kernel = kernelParam;
            AddBindings();
        }

        public object GetService(Type serviceType)
        {
            return kernel.TryGet(serviceType);
        }

        public IEnumerable<object> GetServices(Type serviceType)
        {
            return kernel.GetAll(serviceType);
        }

        private void AddBindings()
        {

            // creating a mock object for the kpi
            DateTime startDate = new DateTime(2018, 01, 01);
            DateTime endDate = DateTime.Now;
            int stationHandle = 32;
            List<Kpi> kpis = new List<Kpi>();
            Random r = new Random();

            foreach (DateTime day in Tools.EachDay(startDate, endDate))
            {
                kpis.Add(
                    new Kpi
                    {
                        StationHandle = stationHandle,
                        StartDateTime = day.Date.Add(new TimeSpan(0, 0, 0)),
                        EndDateTime = day.Date.Add(new TimeSpan(23, 59, 59)),
                        Rates = new Rates { TEEP = r.NextDouble(), GEE = r.NextDouble(), OEE = r.NextDouble(), Performance = r.NextDouble(), Quality = r.NextDouble(), Requisition = r.NextDouble(), Load = r.NextDouble(), Involvement = r.NextDouble(), HardwareAvailability = r.NextDouble() },
                        Times = new Times { AT = r.Next(10000), OT = r.Next(10000), PPT = r.Next(10000), RT = r.Next(10000), NRT = r.Next(10000), FPT = r.Next(10000), FT = r.Next(10000), MTBF = r.Next(10000), MTTR = r.Next(10000) }
                    }
                );
            };

            Mock<IStationKpiRepository> kpiMock = new Mock<IStationKpiRepository>();
            kpiMock.Setup(k => k.StationKpiHistory(stationHandle, startDate, endDate)).Returns(ProConnect.Domain.Concrete.Dummies.GetStationKpiHistory(stationHandle, startDate, endDate));
            kpiMock.Setup(k => k.StationKpi(stationHandle, startDate, endDate)).Returns(Dummies.GetStationKpi(stationHandle, startDate, endDate));
            //kpiMock.SetReturnsDefault(kpis);

            // injecting the kpi mock object. DOES NOT WORK...
            kernel.Bind<IStationKpiRepository>().ToConstant(kpiMock.Object);


            // injecting the real kpi object coming. This works when uncommented.
            //kernel.Bind<IStationKpiRepository>().To<CWorkStationKpiRepository>();

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...