2014-12-29 3 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);"I 얻는 오류가 발생하여 즉시 "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

데이터 집합 비주얼 라이저를 사용하여 "mMediaDurationDataSet = new MediaDurationDS();"줄에서 데이터를 볼 때 3 개의 모델 활동 데이터를 볼 수 있지만 "mMediaDurationDataLayer.GetModelDetails (mMediaDurationDataSet, modelID);" 데이터가 비게됩니다. – iop

+0

"GetModelDetails 메서드"를 게시했습니다. – iop

답변

0

당신의 예외를 복용하고 테스트 한 번 이렇게 한 번 OpenModel에 내가 생각하고 있음을 두 번 뭔가 여기에 액세스하려면 : 테스트 설정에서

을 :

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

을 개방 모델에서 : 예외로

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

말 :

미디어 기간 모델을 검색 할 수 없습니다. 이미 다른 사용자가 모델을 업데이트했습니다.

그래서 PopulateTestDataSet은 기본 시스템에 액세스하고 있으며 사용 중이므로 예외가 발생합니다.

+0

예 ... 어떻게 해결할 수 있습니까? 좀 더 정확하게 설명해 주시겠습니까? 미안 해요, 초보자입니다. – iop

+0

'PopulateTestDataSet'을보고 연결을 닫거나 리소스를 놓아 둘 방법을 찾으십시오. 'MediaDurationDS'에서 코드가 실제로 무엇인지 알지 못한다. 나는 그것이 내부 클래스라고 가정한다. – Mateusz

관련 문제