需要 Rhino Mocks 帮助

Rhino Mocks help needed

enter code here我有以下方法,我需要编写单元测试用例来测试这个方法。

    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);
             }
            }

           }
       }

这是我写的测试方法。

[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.
    }
}

实际方法调用另一个服务层,该服务层又调用网络服务来获取数据。在这种情况下,我不确定在这种情况下 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));
        }
    }
}

根据您提供的代码,您必须在 GetDormantApplications 上设置行为 return 一些 ID,然后验证是否为每个 ID 调用了 UpdateDormantApplications

[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));
    }
}