Search code examples
c#bddstoryq

storyQ passing parameter to function


here is my test, I would like to pass a variable to the function ImageSelectionDatabaseIsValidAllTotalGainsAssigned I want it to check for assertion once for 8 and once for 7.

however you can't pass a parameter to the function and call .Then()

Can you please explain how this can be done?

    [Test]
    public void Set8NewImagesAndTotalGainsRemove2ImagesTest()
    {
        _imageSelectionStory.WithScenario("init new ImagesSelectionViewModel and load 8 new images from database and assign total gain 1,2 to all, and then remove 2 images")
            .Given(InitImageSelectionViewModelAndDatabaseImages)
            .When(SetNewImagesFromDatabase)
            .And(UpdateAssignedToTotalGains)
            .Then(ImageSelectionDatabaseIsValidAllTotalGainsAssigned)
            .Execute();
    }


    private void ImageSelectionDatabaseIsValidAllTotalGainsAssigned()
    {
        foreach (var image in _imagesSelectionViewModel.Images)
        {
            CollectionAssert.AreEqual(new List<double>{1,2}, image.AssignedToTotalGain);
        }
        Assert.AreEqual(8, _imagesSelectionViewModel.Images.Count);
        Assert.True(_imagesSelectionViewModel.IsValid());
    }

Solution

  •            [Test]
                public void Set8NewImagesAndTotalGainsRemove2ImagesTest()
                {
                    _imageSelectionStory.WithScenario("init new ImagesSelectionViewModel and load 8 new images from database and assign total gain" +
                                                      " 1,2 to all, and then remove 2 images")
                        .Given(InitImageSelectionViewModelAndDatabaseImages)
                        .When(SetNewImagesFromDatabase)
                        .And(UpdateAssignedToTotalGainsAndRemove2Images)
                        .Then(ImageSelectionDatabaseIsValidImagesAllTotalGainsAssigned,6)
                        .Execute();
                }
    
                private void ImageSelectionDatabaseIsValidImagesAllTotalGainsAssigned(int expected)
                {
                   foreach (var image in _imagesSelectionViewModel.Images)
                  {
                       CollectionAssert.AreEqual(new List<double> { 1, 2 }, image.AssignedToTotalGain);
                  }
                  Assert.AreEqual(expected, _imagesSelectionViewModel.Images.Count);
                  Assert.True(_imagesSelectionViewModel.IsValid());
                }