C# 用户未处理MOQ异常

C# 用户未处理MOQ异常,c#,unit-testing,moq,moq-3,C#,Unit Testing,Moq,Moq 3,我对莫克很陌生,现在正在学习。我得到了我需要编写单元测试的任务,但我得到了下面的错误,我无法找到。请任何人帮我做这个。另外,如果我的测试用例需要更改,请检查代码并给我一些建议 期望:IAcronisService.GetActivitiesFromDate(“mygroup”),2016年5月24日 8:33:34 PM)调用失败,模拟行为严格 对于Save方法(我已经在引发异常的Save方法中进行了注释) 处理方法调用save方法 public int Process() { Acro

我对莫克很陌生,现在正在学习。我得到了我需要编写单元测试的任务,但我得到了下面的错误,我无法找到。请任何人帮我做这个。另外,如果我的测试用例需要更改,请检查代码并给我一些建议

期望:IAcronisService.GetActivitiesFromDate(“mygroup”),2016年5月24日 8:33:34 PM)调用失败,模拟行为严格

对于Save方法(我已经在引发异常的Save方法中进行了注释)

处理方法调用save方法

public int Process()
{
    AcronisService = AcronisSvcManager.Get(ClientFactory, DataProviderFactory, LogAdapter);

    DataObject backupGroupsDO = GetListOfAllCurrentGroups();

    int activitiesSavedCount = Save(backupGroupsDO);
    return activitiesSavedCount;
}
private int Save(DataObject backupGroupsDO)
{
    int count = 0;

    foreach (DataRecord dr in backupGroupsDO.DataRecord)
    {
        BackupGroup backupGroup = new BackupGroup(dr);

        // Get all activities for each group
        AcronisClient.DataModel.Activity.ActivitiesResponse acronisActivities;
        if (backupGroup.LastActivityDate == null)
        {
            // Get all activities for each group
            ***//Got Exception at this line***
            acronisActivities = AcronisService.GetActivitiesFromDate(backupGroup.GroupName, DateTime.Now.AddDays(-90)); 
        }
        else
        {
            acronisActivities = AcronisService.GetActivitiesFromDate(backupGroup.GroupName, backupGroup.LastActivityDate);
        }



        if (acronisActivities == null || acronisActivities.Activities == null)
        {
            // Stop processing b/c might be an issue with the connection to Acronis
            LogAdapter.LogError(KCBLog.Main, "Stopped processing activities, possible Acronis connection issue with getting Activities");
            return -1;
        }
        var lastBackUpActivity = acronisActivities.Activities.OrderByDescending(z => z.StartTime).FirstOrDefault();

        List<string> lastSuccessfulActivities = new List<string>();
        List<string> lastActivities = new List<string>();

        foreach (var acronisActivity in acronisActivities.Activities)
        {

            Kaseya.KCB.Common.DataModels.AcronisActivity activity = new AcronisActivity();
            activity.BackupPlanId = acronisActivity.BackupPlanId;
            activity.BytesProcessed = acronisActivity.BytesProcessed;
            activity.BytesSaved = acronisActivity.BytesSaved;


            activity.Cause = acronisActivity.CompletionResult == null ? null : acronisActivity.CompletionResult.Cause;
            activity.Reason = acronisActivity.CompletionResult == null ? null : acronisActivity.CompletionResult.Reason;
            activity.Effect = acronisActivity.CompletionResult == null ? null : acronisActivity.CompletionResult.Effect;

            activity.DateCreated = DateTime.Now;

            activity.FinishTime = acronisActivity.FinishTime;
            activity.GroupId = backupGroup.Id;
            activity.Id = acronisActivity.Id;
            activity.InitiatedBy = acronisActivity.InitiatedBy;
            activity.InstanceId = acronisActivity.InstanceId;
            activity.IsRootActivity = (bool)acronisActivity.IsRootActivity;
            activity.ParentActivityId = acronisActivity.ParentActivityId;
            activity.PartitionId = PartitionId;
            activity.StartTime = acronisActivity.StartTime;
            activity.State = acronisActivity.State;
            activity.Status = acronisActivity.Status;
            activity.Title = acronisActivity.Title;
            activity.UpdateTime = acronisActivity.UpdateTime;

            AcronisActivityDataProvider.AddUpdateAcronisActivity(activity);

            AcronisClient.DataModel.Activity.Activity lastSuccessfulActivity = acronisActivities.Activities.Where(z => z.Status == "ok" && z.Title.Contains("Running backup plan") && z.InstanceId==acronisActivity.InstanceId).OrderByDescending(z => z.FinishTime).FirstOrDefault();
            var lastActivity = acronisActivities.Activities.Where(z => z.Title.Contains("Running backup plan") && z.InstanceId == acronisActivity.InstanceId).OrderByDescending(z => z.FinishTime).FirstOrDefault();


            if (!string.IsNullOrEmpty(acronisActivity.InstanceId))
            {
                DataRecord assetDR = AssetDataProvider.GetByInstanceId(acronisActivity.InstanceId, PartitionId);
                if (assetDR != null)
                {
                    var assetId = assetDR.FindValue<string>("id", "");

                    if (lastSuccessfulActivity != null && !lastSuccessfulActivities.Contains(acronisActivity.InstanceId))
                    {
                        AssetDataProvider.UpdateLastSuccessfulActivityId(assetId, lastSuccessfulActivity.ParentActivityId);
                        lastSuccessfulActivities.Add(acronisActivity.InstanceId);
                    }
                    if (lastActivity != null && !lastActivities.Contains(acronisActivity.InstanceId))
                    {
                        AssetDataProvider.UpdateLastActivityId(assetId, lastActivity.ParentActivityId);
                        lastActivities.Add(acronisActivity.InstanceId);
                    }
                }
            }
            count++;
        }

        if (acronisActivities.Activities != null && acronisActivities.Activities.Count>0)
        {
            //backupGroup.LastActivityDate = lastBackUpActivity.StartTime;
            BackupGroupDataProvider.UpdateLastBackupGroupActivityDate(backupGroup.Id, lastBackUpActivity.StartTime);
        }
    }

    return count;
}
当我调试时,当我将鼠标移到上面流程方法的第一行时,我也看到了下面的一行。我认为服务对象不是在调用/模拟。这与上述例外情况有关吗?请提出一些修改建议

(IAcronisServiceProxy)AcronisService)。AcronisURL
引发了类型为MOQ.MockException的异常

保存方法

public int Process()
{
    AcronisService = AcronisSvcManager.Get(ClientFactory, DataProviderFactory, LogAdapter);

    DataObject backupGroupsDO = GetListOfAllCurrentGroups();

    int activitiesSavedCount = Save(backupGroupsDO);
    return activitiesSavedCount;
}
private int Save(DataObject backupGroupsDO)
{
    int count = 0;

    foreach (DataRecord dr in backupGroupsDO.DataRecord)
    {
        BackupGroup backupGroup = new BackupGroup(dr);

        // Get all activities for each group
        AcronisClient.DataModel.Activity.ActivitiesResponse acronisActivities;
        if (backupGroup.LastActivityDate == null)
        {
            // Get all activities for each group
            ***//Got Exception at this line***
            acronisActivities = AcronisService.GetActivitiesFromDate(backupGroup.GroupName, DateTime.Now.AddDays(-90)); 
        }
        else
        {
            acronisActivities = AcronisService.GetActivitiesFromDate(backupGroup.GroupName, backupGroup.LastActivityDate);
        }



        if (acronisActivities == null || acronisActivities.Activities == null)
        {
            // Stop processing b/c might be an issue with the connection to Acronis
            LogAdapter.LogError(KCBLog.Main, "Stopped processing activities, possible Acronis connection issue with getting Activities");
            return -1;
        }
        var lastBackUpActivity = acronisActivities.Activities.OrderByDescending(z => z.StartTime).FirstOrDefault();

        List<string> lastSuccessfulActivities = new List<string>();
        List<string> lastActivities = new List<string>();

        foreach (var acronisActivity in acronisActivities.Activities)
        {

            Kaseya.KCB.Common.DataModels.AcronisActivity activity = new AcronisActivity();
            activity.BackupPlanId = acronisActivity.BackupPlanId;
            activity.BytesProcessed = acronisActivity.BytesProcessed;
            activity.BytesSaved = acronisActivity.BytesSaved;


            activity.Cause = acronisActivity.CompletionResult == null ? null : acronisActivity.CompletionResult.Cause;
            activity.Reason = acronisActivity.CompletionResult == null ? null : acronisActivity.CompletionResult.Reason;
            activity.Effect = acronisActivity.CompletionResult == null ? null : acronisActivity.CompletionResult.Effect;

            activity.DateCreated = DateTime.Now;

            activity.FinishTime = acronisActivity.FinishTime;
            activity.GroupId = backupGroup.Id;
            activity.Id = acronisActivity.Id;
            activity.InitiatedBy = acronisActivity.InitiatedBy;
            activity.InstanceId = acronisActivity.InstanceId;
            activity.IsRootActivity = (bool)acronisActivity.IsRootActivity;
            activity.ParentActivityId = acronisActivity.ParentActivityId;
            activity.PartitionId = PartitionId;
            activity.StartTime = acronisActivity.StartTime;
            activity.State = acronisActivity.State;
            activity.Status = acronisActivity.Status;
            activity.Title = acronisActivity.Title;
            activity.UpdateTime = acronisActivity.UpdateTime;

            AcronisActivityDataProvider.AddUpdateAcronisActivity(activity);

            AcronisClient.DataModel.Activity.Activity lastSuccessfulActivity = acronisActivities.Activities.Where(z => z.Status == "ok" && z.Title.Contains("Running backup plan") && z.InstanceId==acronisActivity.InstanceId).OrderByDescending(z => z.FinishTime).FirstOrDefault();
            var lastActivity = acronisActivities.Activities.Where(z => z.Title.Contains("Running backup plan") && z.InstanceId == acronisActivity.InstanceId).OrderByDescending(z => z.FinishTime).FirstOrDefault();


            if (!string.IsNullOrEmpty(acronisActivity.InstanceId))
            {
                DataRecord assetDR = AssetDataProvider.GetByInstanceId(acronisActivity.InstanceId, PartitionId);
                if (assetDR != null)
                {
                    var assetId = assetDR.FindValue<string>("id", "");

                    if (lastSuccessfulActivity != null && !lastSuccessfulActivities.Contains(acronisActivity.InstanceId))
                    {
                        AssetDataProvider.UpdateLastSuccessfulActivityId(assetId, lastSuccessfulActivity.ParentActivityId);
                        lastSuccessfulActivities.Add(acronisActivity.InstanceId);
                    }
                    if (lastActivity != null && !lastActivities.Contains(acronisActivity.InstanceId))
                    {
                        AssetDataProvider.UpdateLastActivityId(assetId, lastActivity.ParentActivityId);
                        lastActivities.Add(acronisActivity.InstanceId);
                    }
                }
            }
            count++;
        }

        if (acronisActivities.Activities != null && acronisActivities.Activities.Count>0)
        {
            //backupGroup.LastActivityDate = lastBackUpActivity.StartTime;
            BackupGroupDataProvider.UpdateLastBackupGroupActivityDate(backupGroup.Id, lastBackUpActivity.StartTime);
        }
    }

    return count;
}
private int Save(DataObject backupGroupsDO)
{
整数计数=0;
foreach(备份组中的DataRecord dr do.DataRecord)
{
备份组备份组=新备份组(dr);
//获取每组的所有活动
AcronisClient.DataModel.Activity.Activities响应acronisActivities;
if(backupGroup.LastActivityDate==null)
{
//获取每组的所有活动
***//这一行有异常***
acronisActivities=AcronisService.GetActivitiesFromDate(backupGroup.GroupName,DateTime.Now.AddDays(-90));
}
其他的
{
acronisActivities=AcronisService.GetActivitiesFromDate(backupGroup.GroupName,backupGroup.LastActivityDate);
}
if(acronisActivities==null | | acronisActivities.Activities==null)
{
//停止处理b/c可能是连接到Acronis的问题
LogAdapter.LogError(KCBLog.Main,“已停止处理活动,获取活动可能存在Acronis连接问题”);
返回-1;
}
var lastBackUpActivity=acronisActivities.Activities.OrderByDescending(z=>z.StartTime.FirstOrDefault();
List lastSuccessfulActivities=新列表();
List lastActivities=新列表();
foreach(acronisActivities.Activities中的var acronisActivity)
{
Kaseya.KCB.Common.DataModels.AcronisActivity活动=新的AcronisActivity();
activity.BackupPlanId=acronisActivity.BackupPlanId;
activity.BytesProcessed=acronisActivity.BytesProcessed;
activity.BytesSaved=acronisActivity.BytesSaved;
activity.Cause=acronisActivity.CompletionResult==null?null:acronisActivity.CompletionResult.Cause;
activity.Reason=acronisActivity.CompletionResult==null?null:acronisActivity.CompletionResult.Reason;
activity.Effect=acronisActivity.CompletionResult==null?null:acronisActivity.CompletionResult.Effect;
activity.DateCreated=DateTime.Now;
activity.FinishTime=acronisActivity.FinishTime;
activity.GroupId=backupGroup.Id;
activity.Id=acronisActivity.Id;
activity.InitiatedBy=acronisActivity.InitiatedBy;
activity.InstanceId=acronisActivity.InstanceId;
activity.IsRootActivity=(bool)acronisActivity.IsRootActivity;
activity.ParentActivityId=acronisActivity.ParentActivityId;
activity.PartitionId=分区ID;
activity.StartTime=acronisActivity.StartTime;
activity.State=acronisActivity.State;
activity.Status=acronisActivity.Status;
activity.Title=acronisActivity.Title;
activity.UpdateTime=acronisActivity.UpdateTime;
AcronisActivityDataProvider.AddUpdateAronisActivity(活动);
AcronisClient.DataModel.Activity.Activity lastSuccessfulActivity=acronisActivities.Activities.Where(z=>z.Status==“ok”&&z.Title.Contains(“运行备份计划”)&&z.InstanceId==acronisActivity.InstanceId)。OrderByDescending(z=>z.FinishTime)。FirstOrDefault();
var lastActivity=acronisActivities.Activities.Where(z=>z.Title.Contains(“运行备份计划”)&&z.InstanceId==acronisActivity.InstanceId).OrderByDescending(z=>z.FinishTime).FirstOrDefault();
如果(!string.IsNullOrEmpty(acronisActivity.InstanceId))
{
DataRecord assetDR=AssetDataProvider.GetByInstanceId(acronisActivity.InstanceId,PartitionId);
如果(assetDR!=null)
{
var assetId=assetDR.FindValue(“id”,即“);
if(lastSuccessfulActivity!=null&!lastSuccessfulActivities.Contains(acronisActivity.InstanceId))
{
AssetDataProvider.UpdatelassSuccessfulActivityId(assetId,lastSuccessfulActivity.ParentActivityId);
lastSuccessfulActivities.Add(acronisActivity.InstanceId);
}
if(lastActivity!=null&!lastActivities.Contains(acronisActivity.InstanceId))
{
AssetDataProvider.UpdateLastActivityId(assetId,lastActivity.ParentActivityId);
添加(acronisActivity.InstanceId);
}
}
}
计数++;
}
if(acronisActivities.Activities!=null&&acronisActivities.Activities.Count>0)
{
//backupGroup.LastActivityDate=lastBackUpActivity.StartTime;
BackupGroupDataProvider.UpdateLastBackupGroupActivityDate(backupGroup.Id,lastBackUpActivity.StartTime);
}
}
返回计数;
}
我编写的测试方法,

public void Test()
{
    string groupName = "mygroup";
    string mybackupAccountName = "mybackupaccount";
    decimal PartitionId = 9m;
    DateTime lastActivityDate = DateTime.Parse("2016-08-14T20:47:05");
    string instanceId = "utinstanceId";
    string assetId = "123";


    DataRecord asset = new DataRecord();
    asset.AddField("id", 123);

    DataObject backupGroupsDO = new DataObject();
    DataRecord groupDataRecord = new DataRecord();
    groupDataRecord.AddField("id", 123);
    groupDataRecord.AddField("partitionId", PartitionId);
    groupDataRecord.AddField("groupName", groupName);

    //groupDataRecord.AddField("lastActivityDate", lastActivityDate);

    groupDataRecord.AddField("backupAccountName", mybackupAccountName);
    backupGroupsDO.DataRecord.Add(groupDataRecord);

    AcronisActivity acronisActivity = new AcronisActivity();
    acronisActivity.BackupPlanId = "utBackupPlanId";

    ActivitiesResponse activitiesResponse = new ActivitiesResponse();
    AcronisClient.DataModel.Activity.Activity activity = new AcronisClient.DataModel.Activity.Activity();
    activity.BackupPlanId = "utackupPlanId";
    activity.BytesProcessed = 124674;
    activity.BytesSaved = 06446;
    activity.CompletionResult = new CompletionResult()
    {
        Cause = "utCause",
        Reason = "utReason",
        Effect = "utEffect"
    };
    activity.FinishTime = DateTime.Parse("2016-08-14T20:47:04");
    activity.Id = "utId";
    activity.InitiatedBy = "utInitiatedBy";
    activity.InstanceId = "utInstanceId";
    activity.IsRootActivity = true;
    activity.ParentActivityId = "utParentActivityId";
    activity.StartTime = DateTime.Parse("2016-08-14T20:47:02");
    activity.State = "utState";
    activity.Status = "utStatus";
    activity.Title = "utTitle";
    activity.UpdateTime = DateTime.Parse("2016-08-14T20:47:03");

    activitiesResponse.Activities = new List<AcronisClient.DataModel.Activity.Activity>();
    activitiesResponse.Activities.Add(activity);

    var moqFactory = new MockRepository(MockBehavior.Strict);

    var moqDataProviderFactory = moqFactory.Create<IDataProviderFactory>();
    var moqDataProvider = moqFactory.Create<IDataProvider>();
    var moqLogAdapter = moqFactory.Create<ILogAdapter>();
    var moqAcronisServiceManager = moqFactory.Create<IAcronisServiceManager>();
    var moqAcronisService = moqFactory.Create<IAcronisService>();
    var moqAssetDataProvider = moqFactory.Create<IAssetDataProvider>();
    var moqAcronisActivityDataProvider = moqFactory.Create<IAcronisActivityDataProvider>();
    var moqBackupGroupDataProvider = moqFactory.Create<IBackupGroupDataProvider>();


    Credential MSPCredential = new Credential();

    moqDataProviderFactory.Setup(m => m.BackupGroupDataProvider.GetBackupGroups()).Returns(backupGroupsDO);

    moqAcronisServiceManager.Setup(m => m.Get(It.IsAny<IRestClientFactory>(), It.IsAny<IDataProviderFactory>(), It.IsAny<ILogAdapter>(), "")).Returns(moqAcronisService.Object);

    moqDataProvider.Setup(m => m.VerifyPartitionId(ref PartitionId));
    moqDataProvider.Setup(m => m.ExecuteNonQuery(It.IsAny<AddUpdateAcronisActivity>())).Returns(1);
    moqAcronisService.Setup(m => m.GetActivitiesFromDate(groupName, lastActivityDate)).Returns(activitiesResponse);
    moqAcronisActivityDataProvider.Setup(m => m.AddUpdateAcronisActivity(acronisActivity));
    moqAssetDataProvider.Setup(m => m.GetByInstanceId(instanceId, PartitionId,1)).Returns(asset);
    moqAssetDataProvider.Setup(m => m.UpdateLastActivityId(assetId, activity.ParentActivityId));
    moqAssetDataProvider.Setup(m => m.UpdateLastSuccessfulActivityId(assetId, activity.ParentActivityId));
    moqBackupGroupDataProvider.Setup(m => m.UpdateLastBackupGroupActivityDate("1234", lastActivityDate));

    // moqAcronisService.Setup(m => m.GetActivitiesFromDate(groupName, Convert.ToDateTime("2016-08-18T13:18:40.000Z"))).Returns(activitiesResponse);


    ActivityHarvester activityHarvester = new ActivityHarvester();

    activityHarvester.PartitionId = PartitionId;
    activityHarvester.DataProvider = moqDataProvider.Object;
    activityHarvester.LogAdapter = moqLogAdapter.Object;
    activityHarvester.AcronisSvcManager = moqAcronisServiceManager.Object;
    activityHarvester.DataProviderFactory = moqDataProviderFactory.Object;
    activityHarvester.AcronisService = moqAcronisService.Object;
    activityHarvester.AssetDataProvider = moqAssetDataProvider.Object;
    activityHarvester.BackupGroupDataProvider = moqBackupGroupDataProvider.Object;
    activityHarvester.AcronisActivityDataProvider = moqAcronisActivityDataProvider.Object;


    activityHarvester.process();//*process method calls above save method method* 
    moqFactory.VerifyAll();
}
公共无效测试()
{
字符串groupName=“mygroup”;
字符串mybackupAccountName=“mybackupaccount”;