2012-01-14 4 views
3

저는 단위 테스트 필드에서 초보자입니다. 따라서 몇 가지 질문이 있습니다.DataTable을 반환하는 메서드를 테스트하는 방법?

DataTable을 반환하는 메서드를 만드는 것이 좋습니다. 그렇다면 어떻게 테스트 할 수 있습니까?

은 테스트를 부탁하는 기능입니다 :

public static DataTable GeneratePeriods(DateTime startDate, DateTime endDate, string periodicity) 
{ 
    try 
    { 
     using (DataTable periods = new DataTable()) 
     { 
      periods.Columns.Add(new DataColumn("Dates", typeof(DateTime))); 
      int startYear = startDate.Year; 
      int endYear = endDate.Year; 
      int Diff = endYear - startYear + 1; 
      int LoopYear; 
      /* This generates all regular periods from the begin date to the end date */ 
      switch (periodicity) 
      { 
       //monthly 
       case "Mensuelle": 
        for (int j = 0; j < Diff; j++) 
        { 
         LoopYear = startYear + j; 
         for (int i = 1; i <= 12; i++) 
          if (i != 12) 
           periods.Rows.Add(new DateTime(LoopYear, i + 1, 1).AddDays(-1)); 
          else 
           periods.Rows.Add(new DateTime(LoopYear, 12, 31)); 
        } 
        break; 
       //quarterly 
       case "Trimestrielle": 
        for (int j = 0; j < Diff; j++) 
        { 
         LoopYear = startYear + j; 
         for (int i = 1; i <= 4; i++) 
          if (i != 4) 
           periods.Rows.Add(new DateTime(LoopYear, (i * 3) + 1, 1).AddDays(-1)); 
          else 
           periods.Rows.Add(new DateTime(LoopYear, 12, 31)); 
        } 
        break; 
       //biannual 
       case "Semestrielle": 
        for (int j = 0; j < Diff; j++) 
        { 
         LoopYear = startYear + j; 
         for (int i = 1; i <= 2; i++) 
          if (i != 2) 
           periods.Rows.Add(new DateTime(LoopYear, (i * 6) + 1, 1).AddDays(-1)); 
          else 
           periods.Rows.Add(new DateTime(LoopYear, 12, 31)); 
        } 
        break; 
       //annual 
       case "Annuelle": 
        for (int j = 0; j < Diff; j++) 
        { 
         LoopYear = startYear + j; 
         for (int i = 1; i <= 1; i++) 
          periods.Rows.Add(new DateTime(LoopYear, 12, 31)); 
        } 
        break; 
      } 
      //this adds startDate in periods datatable if it doesn't exist 
      if (periods.Select(String.Format("Dates = '{0}'", startDate)).Length == 0) 
       periods.Rows.Add(startDate); 
      //this adds endDate date in periods datatable if it doesn't exist 
      if (periods.Select(String.Format("Dates = '{0}'", endDate.AddDays(-1))).Length == 0) 
       periods.Rows.Add(endDate); 
      //this removes all date ranges below the startDate 
      DataRow[] dr = periods.Select(String.Format("Dates < '{0}'", startDate)); 
      foreach (DataRow row in dr) 
       periods.Rows.Remove(row); 
      //this removes all date ranges above the endDate 
      DataRow[] dr1 = periods.Select(String.Format("Dates >'{0}'", endDate.AddDays(-1))); 
      foreach (DataRow row in dr1) 
       periods.Rows.Remove(row); 
      //this adds endDate date in periods datatable if it doesn't exist for the second time ! (I personnaly don't know why it's duplicated but it dosen't work without this =)) 
      if (periods.Select(String.Format("Dates = '{0}'", endDate.AddDays(-1))).Length == 0) 
       periods.Rows.Add(endDate); 
      DataView dv = new DataView(periods) { Sort = "Dates ASC" }; 
      // this initialize a new datatable with sorted dates 
      DataTable dt_dates = dv.ToTable(); 
      // this initialize a new datatable 
      DataTable dt_periods = new DataTable(); 
      dt_periods.Columns.Add("Periods", typeof(string)); 
      dt_periods.Columns.Add("NombreJours", typeof(int)); 
      // this loop creates period ranges shown to the user (Du startDate au endDate) 
      DateTime dateDebutPeriode; 
      DateTime dateFinPeriode; 
      int NombreJours; 
      for (int i = 0; i < dv.Table.Rows.Count - 1; i++) 
       if (i == 0) 
       { 
        dateDebutPeriode = DateTime.Parse(dt_dates.Rows[i]["Dates"].ToString()); 
        dateFinPeriode = DateTime.Parse(dt_dates.Rows[i + 1]["Dates"].ToString()); 
        NombreJours = dateFinPeriode.Subtract(dateDebutPeriode).Days + 1; 
        dt_periods.Rows.Add(String.Format("Du {0} au {1}", dateDebutPeriode.ToShortDateString(), dateFinPeriode.ToShortDateString()), NombreJours); 
       } 
       else 
        if (i == dv.Table.Rows.Count - 2) 
        { 
         dateDebutPeriode = DateTime.Parse(dt_dates.Rows[i]["Dates"].ToString()).AddDays(1); 
         dateFinPeriode = DateTime.Parse(dt_dates.Rows[i + 1]["Dates"].ToString()).AddDays(-1); 
         NombreJours = dateFinPeriode.Subtract(dateDebutPeriode).Days + 1; 
         dt_periods.Rows.Add(String.Format("Du {0} au {1}", dateDebutPeriode.ToShortDateString(), dateFinPeriode.ToShortDateString()), NombreJours); 
        } 
        else 
        { 
         dateDebutPeriode = DateTime.Parse(dt_dates.Rows[i]["Dates"].ToString()).AddDays(1); 
         dateFinPeriode = DateTime.Parse(dt_dates.Rows[i + 1]["Dates"].ToString()); 
         NombreJours = dateFinPeriode.Subtract(dateDebutPeriode).Days + 1; 
         dt_periods.Rows.Add(String.Format("Du {0} au {1}", dateDebutPeriode.ToShortDateString(), dateFinPeriode.ToShortDateString()), NombreJours); 
        } 
      return dt_periods; 
     } 
    } 
    catch (InvalidOperationException) 
    { 
     throw; 
    } 
} 
+1

한 가지 질문에 여러 질문을하지 마십시오. 그들을 따로 물어보십시오. 그러나이 경우 두 번째 질문은 건설적인 질문이 아니며 닫힐 확률이 높습니다. – ChrisF

+0

어쩌면 '어떻게 DataTable을 반환하는이 메서드를 테스트 할 수 있습니까?'라는 질문을하고 코드를 제공하고 거기에서 가져옵니다. – blank

답변

0

여기에 테스트 할 수 있습니다 무엇 반환 DataTable 구조는 당신이 무엇을 기대 실제로 있는지 여부입니다. 그것들은 단순하고 간단한 단위 테스트입니다. 이 무엇인지 확인하십시오.GeneratePeriods 메서드 (원하는대로 무엇을하고 싶습니까?)를 확인하고 실제로 어떤 메서드가 있는지 검사하여 테스트를 작성하십시오. 주기의 정확한 수는 아마 많이 주어진 기간이 올바르게 행/열을 설정 여부 행 데이터가 올바른 형식

  • 테스트 여부
  • 테스트 생성 ... 및인지

    • 시험 예 : more

    참고로, 기능에서 DataTable을 반환하는 데는 아무런 문제가 없습니다.

  • 관련 문제