2015-08-18 3 views
1

enter code here У меня есть следующий метод, когда мне нужно написать единичный тестовый пример, чтобы проверить этот метод.Помощь Rhino Mocks

public void ProcessDormantApplications() 
    { 
     List<long> dormantApplicationIDs = new List<long>(); 

     dormantApplicationIDs = service.GetDormantApplications(); 

     if (dormantApplicationIDs.Count > 0) 
     { 

      foreach (long dormantID in dormantApplicationIDs) 
      { 
       string msg = service.UpdateDormantApplications(dormantID); 
      } 
      } 

      } 
     } 

и это метод TEST, который я написал.

[TestClass] 
public class DormantApplicationsTest 
{ 

    ILogger logger; 
    IService Service; 

    [TestInitialize] 
    public void SetUp() 
    { 
     logger = MockRepository.GenerateStub<ILogger>(); 
     Service = MockRepository.GenerateStub<IService>(); 
    } 

    [TestMethod] 
    public void TESTProcessDormantApplications() 
    { 
     ////arrange 
     ////act 
     var target = new BLogic(service, logger); 
     target.ProcessDormantApplications(); 

     ////assert 
     // service.AssertWasCalled(x => x. 
    } 
} 

Фактический метод вызывает другой служебный уровень, который inturn вызывает веб-службу для получения данных. В этом случае я не уверен, что до ASSERT в этой ситуации.

[TestMethod] 
    public void CheckProcessDormantApplications_InBetweenApplicationFailedToUpdate() 
    { 
     ////arrange 
     var applicationIds = new List<long>() 
     { 
      1,2,3 

     }; 
     UpdateResponse.isSuccess = true; 
     UpdateResponse.errorMessage = string.Empty; 

     Service.Stub(x => x.GetDormantApplications()).Return(applicationIds); 
     for(int i=0; i <= applicationIds.Count-1; i++) 
     { 
      if (i == 1) //set this application id response to FALSE so it should continnue with next record as well 
      { 
       UpdateResponse.isSuccess = false; 
       UpdateResponse.errorMessage = "making it fail for test"; 
      } 

      Service.Stub(x =>x.UpdateDormantApplications(applicationIds[i])).Return(UpdateResponse); 
     } 
     ////act 
     var target = new BLogic(Service, logger); 
     target.ProcessDormantApplications(); 

     ////assert 
     foreach (long id in applicationIds) 
     { 
      Service.AssertWasCalled(x => x.UpdateDormantApplications(id)); 
     } 
    } 
} 

ответ

0

На основе кода вы предоставляете вы должны установить поведение на GetDormantApplications, которые возвращают некоторые идентификаторы, а затем проверить, что UpdateDormantApplications была вызвана для каждого ID:

[TestMethod] 
public void Check_ProcessDormantApplications() 
{ 
    ////arrange 
    var applicationId = new List<long>() 
    { 
     //put here some ids 
    }; 

    DormantServiceAdapter.Stub(x => x.GetDormantApplications()).Return(applicationId); 
    var target = new DormantApplicationsBusinessLogic(DormantServiceAdapter, logger); 

    ////act   
    target.ProcessDormantApplications(); 

    ////assert 
    foreach (var id in applicationId) 
    { 
     DormantServiceAdapter.AssertWasCalled(x => x.UpdateDormantApplications(id)); 
    } 
} 
+0

так, вы имеете в виду мы насмехаясь, что Метод GetDormantApplciations() должен возвращать, а затем вызывать updateormantappliations для каждого идентификатора? если да, то как мы собираемся протестировать метод getdormantappliation, который на самом деле должен вернуть список идентификаторов? – user3264937

+0

@ user3264937 вы этого не делаете, это 'UT', вы должны проверить только поведение тестируемого устройства (' ProcessDormantApplications'). В другом '' вы должны проверить поведение 'GetDormantApplications' ... –

+0

Спасибо за ясность; один вопрос, однако, не мы выполняем [вызывающий реальный метод] updateormantqapplications, когда говорим DormantServiceAdapter.AssertWasCalled (x => x.UpdateDormantApplications (id))? – user3264937