2014-12-29 2 views
0

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

Ошибка для теста не удалось: «Метод испытания TestBusinessLogic.MediaDurationBLTest.OpenModelTest бросил исключение: System.Exception:. Невозможно извлечь медиа Продолжительность модели Другой пользователь уже обновленную модель Пожалуйста, обновите и попробуйте еще раз «.

MediaDurationBLTest.cs

Это основной метод:

[TestMethod()] 
     public void OpenModelTest() 
     { 
      MediaDurationDS mds = new MediaDurationDS(); 
      PopulateTestDataSet(mds); 

      MediaDurationBL target = new MediaDurationBL(); 
      TestBusinessLogic.BusinessLogic_MediaDurationBLAccessor accessor = new TestBusinessLogic.BusinessLogic_MediaDurationBLAccessor(target); 
      //assign accessor to mds 
      accessor.mMediaDurationDataSet = mds; 

      int modelID = 5514; 

      target.OpenModel(modelID); 

      Assert.AreEqual(20, mds.Tables.Count, "# of tables retrieved are different"); 

      //We are creating copy of ProjectMetricData, check if copyTable and original table are same 
      //except projectmetrictdata has pf&d and client does not so subtract that. 
      int pfanddRows = 2; 
      int projectMetricDataRows = accessor.mMediaDurationDataSet.ProjectMetricData.Rows.Count; 
      int copiedRows = projectMetricDataRows - pfanddRows; 
      if (copiedRows < 0) 
       copiedRows = 0; 

      Assert.AreEqual(accessor.mMediaDurationDataSet.ClientProjectMetricData.Rows.Count, copiedRows, "project metric data copy not created"); 

     } 

Это внутренний код "target.OpenModel (ModelID);", я получаю ошибка и сразу перейти на «catch (Exception e)»), мои данные здесь пустые »mMediaDurationDataLayer.GetModelDetails (mMediaDurationDataSet, modelID); ", как я могу решить эту ошибку?

public DataSet OpenModel(int modelID) 
     { 
      try 
      { 
       mMediaDurationDataSet = new MediaDurationDS(); 
       mMediaDurationDataLayer.GetModelDetails(mMediaDurationDataSet, modelID); 

       //ConvertToLocalTime(mMediaDurationDataSet.Model, "ClientLastUpdateDate"); 
       ConvertToLocalTime(mMediaDurationDataSet.ModelActivity, "ClientLastUpdateDate"); 

       //IF MODEL IS MOR, ACT 
       CreateProjectForMORModel(modelID); 

       //COPY PROJECT METRIC DATA TABLE INTO CLIENTPROJECTMETRICDATA 
       foreach (MediaDurationDS.ProjectMetricDataRow pmdr in mMediaDurationDataSet.ProjectMetricData.Rows) 
       { 
        //WE DONT WANT PF&D IN CLIENT TABLE 
        if (!pmdr.MetricTypeName.Equals(PFANDDPARAMETER)) 
        { 
         CreateClientProjectMetricDataRow(pmdr, pmdr.ProjectMetricID); 
        } 

       }   

       mMediaDurationDataSet.AcceptChanges(); 
       mMediaDurationDataSet.WriteXml("C:\\MediaDurationTestDataSet.xml"); 
       return mMediaDurationDataSet; 
      } 
      catch (Exception e) 
      { 
       string errorMessage = "Unable to retrieve Media Duration Model " +Environment.NewLine + e.Message; 
       throw new Exception(errorMessage); 
      } 
     } 



public class MediaDurationDL 
{ 
    ProjectManagerDL mProjectManagerDL; 

    public void GetModelDetails(DataSet mediaDurationDataSet, int modelID) 
    { 
     Database db = X.XXX.WindowsApplicationTemplate.ApplicationDatabase.DatabaseFactory.CreateDatabase(); 

     string sqlProcedure = "uspMediaDurationGetModel"; 
     DbCommand dbCommand = db.GetStoredProcCommand(sqlProcedure); 
     UtilityDL.SetCommandTimeout(dbCommand); 
     db.AddInParameter(dbCommand, "ModelID", DbType.Int32, modelID); 

     string[] tables = new string[] { "LaborCategory", "ProcessCategory", "Media", "Activity",     "Time", "Model", "ModelTime", "ModelActivity", 
     "Project", "ProjectAccess", "MetricType", "ProjectMetric", "ProjectMetricData" };//, "Metric", "MetricData"}; 

     // RETRIEVE DATA FROM DB AND LOAD INTO DATASET 
     mediaDurationDataSet.Clear(); 
     //PrintAllErrs(mediaDurationDataSet); 
     db.LoadDataSet(dbCommand, mediaDurationDataSet, tables); 
     //PrintAllErrs(mediaDurationDataSet); 
    } 

Я предполагаю, что это неверная информация данных в файле «MediaDurationTestDataSet.xml», как я могу получить правильные из них?

+0

Покажите нам трассировку стека как минимум. Существует исключение в некоторых вызовах внутри метода GetModelDetails. Неизвестно, куда его бросили, потому что вы скрыли его, используя конструкцию 'catch'. В настоящее время единственный способ решить эту проблему - отлаживать больше. Также вы поняли, что то, что вы делаете, не является модульным тестированием вообще? – rufanov

+0

Я могу видеть 3 данные о деятельности модели, когда я использую визуализатор набора данных для просмотра данных в строке «mMediaDurationDataSet = new MediaDurationDS();», однако, когда я отлаживаю эту строку «mMediaDurationDataLayer.GetModelDetails (mMediaDurationDataSet, modelID)»; данные становятся пустыми. – iop

+0

Я опубликовал метод GetModelDetails. – iop

ответ

0

Берем исключение и что вы делаете это один раз в тесте, и один раз в OpenModel я имею в виду, вы хотите что-то в два раза здесь доступ:

В вашей тестовой конфигурации:

MediaDurationDS mds = new MediaDurationDS(); 
    PopulateTestDataSet(mds); 

В открытой модели :

mMediaDurationDataSet = new MediaDurationDS(); 
    mMediaDurationDataLayer.GetModelDetails(mMediaDurationDataSet, modelID); 

Как исключение говорят:

Не удалось получить модель продолжительности медиа. Еще один пользователь уже обновил модель.

Таким образом, ваш PopulationTestDataSet обращается к базовой системе, и вы получаете исключение, потому что оно используется.

+0

да ... как я могу это решить? Можете ли вы объяснить более точное? извините, я начинаю здесь. – iop

+0

Загляните в 'PopulateTestDataSet' и найдите способ закрыть соединение или отпустить какой-то ресурс. Не знаю, что такое код в «MediaDurationDS». Я предполагаю, что это какой-то внутренний класс. – Mateusz