mardi 2 février 2016

How to eliminate the dependency from database by unit test

Is it possible to create unit test from this method?

public void CheckIndicatorMeasurementRecordingValidity(IndicatorMeasurementRecording indicatorMeasurementRecording)
{
   var isDateRangeOverLapping = this.db.IndicatorMeasurementRecordingRepository.Any(r => r.IndicatorId == indicatorMeasurementRecording.Indicator.Id && r.Id != indicatorMeasurementRecording.Id
                && r.RecordingDateRange.ToDateTime >= indicatorMeasurementRecording.RecordingDateRange.FromDateTime
                && r.RecordingDateRange.FromDateTime <= indicatorMeasurementRecording.RecordingDateRange.ToDateTime);

   if (isDateRangeOverLapping)
   {
       throw new GrcUserException(IndicatorThresholdValidityManagementLocal.DateRangeOverlapping);
   }
}

I tried to created the test like this

[TestMethod]
public void Indicator_measurement_date_range_overlapping_shall_throw_exception()
{
    var indicator = new Indicator();
    var oldIndicatorMeasurementRecording = new IndicatorMeasurementRecording();
    var newIndicatorMeasurementRecording = new IndicatorMeasurementRecording();
    var errorMessage = string.Empty;

    oldIndicatorMeasurementRecording.Id = 1;
    oldIndicatorMeasurementRecording.RecordingDateRange.FromDateTime = DateTime.Today.AddDays(-5);
    oldIndicatorMeasurementRecording.RecordingDateRange.ToDateTime = DateTime.Today;
    indicator.IndicatorMeasurementRecordings.Add(oldIndicatorMeasurementRecording);

    oldIndicatorMeasurementRecording.Id = 2;
    newIndicatorMeasurementRecording.RecordingDateRange.FromDateTime = DateTime.Today.AddDays(-2);
    newIndicatorMeasurementRecording.RecordingDateRange.ToDateTime = DateTime.Today;
    newIndicatorMeasurementRecording.Indicator = indicator;

    try
    {
        this.indicatorValidityProxy.CheckIndicatorMeasurementRecordingValidity(newIndicatorMeasurementRecording);
    }
    catch (Exception ex)
    {
        errorMessage = ex.Message;
    }

    Assert.AreEqual(IndicatorThresholdValidityManagementLocal.DateRangeOverlapping, errorMessage);
}

The problem is.. the test is always failed because this.db.IndicatorMeasurementRecordingRepository.Count for test is always 0. For development purpose is always return the correct number. Only by test purpose is 0.

Can anyone help me why this.db.IndicatorMeasurementRecordingRepository.Count for test purpose always 0? And how is the best practice to writing the test for my case?

Thank you

Aucun commentaire:

Enregistrer un commentaire