mercredi 22 avril 2015

How to verify number of calls method of 'this' service

I'm using NUnit framework with moq for testing. I've got a problem with veryfing how many times private method of this class has been called. To do so with mock object it's enough to call Verify() with parameters of type Times, but my method is part of this class. I was trying to mock current service (SUT), but it probably isn't the best idea and it doesn't work properly.

SUT:

public object Post(Operations.Campaign.Merge request)
{
    List<CampaignIdWithNumberOfAds> campaignList = new List<CampaignIdWithNumberOfAds>();

        for (int i = 0; i < request.CampaignIdsToMerge.Count; i++)
        {
            if (this.CampaignRepository.Exist(request.CampaignIdsToMerge[i]))
            {
                campaignList.Add(new CampaignIdWithNumberOfAds()
                {
                    CampaignId = request.CampaignIdsToMerge[i],
                    NumberOfAdvertisement = this.CampaignRepository.GetNumberOfAdvertisementsInCampaign(request.CampaignIdsToMerge[i])
                });
            }
        }

        if (campaignList.Count > 1)
        {
            campaignList = campaignList.OrderByDescending(p => (p == null) ? -1 : p.NumberOfAdvertisement).ToList();
            List<CampaignIdWithNumberOfAds> campaignsToMerge = campaignList.Skip(1).ToList();
            CampaignIdWithNumberOfAds chosenCampaign = campaignList.FirstOrDefault<CampaignIdWithNumberOfAds>();

            uint chosenCampaignId = chosenCampaign.CampaignId;

            foreach (var campaignToMerge in campaignsToMerge)
            {
                this.MergeCampaigns(chosenCampaignId, campaignToMerge.CampaignId);
            }
        }

        return true;
    }

Test:

    [Test]
    public void MergeCampaignsPost_ValidMergeCampaignsRequest_ExecuteMergeCampaignsMethodAppropriateNumberOfTimes() 
    {
        // Arrange
        var mockCampaignService = new Mock<Toucan.Api.Services.CampaignService>();
        var request = Mother.GetValidMergeCampaignsRequest_WithDifferentNumbersOfAdvertisement();
        mockCampaignService.Setup(x => x.MergeCampaigns(It.IsAny<uint>(), It.IsAny<uint>()));

        // Act
        var response = this.Service.Post(request);

        // Assert
        mockCampaignService.Verify(x => x.MergeCampaigns(It.IsAny<uint>(), It.IsAny<uint>()), Times.Exactly(request.CampaignIdsToMerge.Count - 1));
    }

Aucun commentaire:

Enregistrer un commentaire