public BatteryCharger GetBatteryCharger(BatteryChargerType type, int value)
        {
            switch (type)
            {
            case BatteryChargerType.THREAD:
                return(new BatteryChargerThread(value));

            case BatteryChargerType.TASK:
                return(new BatteryChargerTask(value));

            default:
                throw new NotSupportedException($"{type.ToString()} is not supported yet.");
            }
        }
        private void TestThatBatteryChargeLevelIncreasedWhenChargerIsConnected(BatteryChargerType type)
        {
            int value = _battery.ChargeLevel;

            _discharger.Start();
            BatteryCharger charger = BatteryChargerFactory.Instance().GetBatteryCharger(type, CHARGE_VALUE);

            charger.Charge += _battery.IncreaseChargeLevel;
            charger.Start();

            Thread.Sleep(Convert.ToInt32(Math.Max(_discharger.DischargePeriod * 1.1,
                                                  charger.ChargePeriod * 1.1)));
            if (Math.Abs(DISCHARGE_VALUE) / _discharger.DischargePeriod >= CHARGE_VALUE / charger.ChargePeriod)
            {
                Assert.True(value >= _battery.ChargeLevel);
            }
            else
            {
                Assert.True(value < _battery.ChargeLevel);
            }
        }