Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

NUnit use different objects as Test Cases

I am trying to write an Update Test for different products (which are classes in this case) and different time steps :

public class UpdateTest 
{
    private static Product ProductLastYear;
    private static Product ProductTwoYearsAgo;
    public UpdateTest(Product product)
    {
        var previousReleasedProducts = new Products();
        ProductLastYear = previousReleasedProducts.GetProduct(Years.GetLastYear());
        ProductTwoYearsAgo = previousReleasedProducts.GetProduct(Years.GetTwoYearsAgo());
    }

Each product needs to be installed, and afterwards it is checked if the installation was successful (this is basically a pre-step before the Update). Right now, I am using two Tests for this:

[Test, Category("UpdateLastYear")), Order((int) NunitTestOrderEnum.Order.First)]
public void InstallPreviousReleasedProduct()
{
    using (var controller = new BootstrapperController(ProductLastYear))
    {
        controller.Install();
    }

    var successfulInstallation = InstallationValidator.ValidateInstall(ProductLastYear);
    Assert.That(successfulInstallation, Is.True);
}

[Test, Category("UpdateTwoYearsAgo"), Order((int) NunitTestOrderEnum.Order.First)]
public void InstallTwoYearsAgoProduct()
{
    using (var controller = new BootstrapperController(ProductTwoYearsAgo))
    {
        controller.Install();
    }

    var successfulInstallation = InstallationValidator.ValidateInstall(ProductTwoYearsAgo);
    Assert.That(successfulInstallation, Is.True);
}

Now, both tests have some code redundancy, which I would like to avoid. I was thinking about using TestCases for this, something like :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

[TestCase(ProductLastYear), Category("UpdateLastYear"), Order((int) NunitTestOrderEnum.Order.First)]
[TestCase(ProductTwoYearsAgo), Category("UpdateTwoYearsAgo"), Order((int) NunitTestOrderEnum.Order.First)]
public void InstallPreProduct(Product product)
{
    using (var controller = new BootstrapperController(product))
    {
        controller.Install();
    }

    var successfulInstallation = InstallationValidator.ValidateInstall(product);
    Assert.That(successfulInstallation, Is.True);
}

Is something like this possible? I tried different Syntax for that approach, but it does not seem to work that easily.

>Solution :

You can only use compile-time constants within attributes. However your static fields are no constants.

You can use the TestCaseSource-attribute:

[TestCaseSource(nameof(ProvideTestcases))]
public void InstallPreProduct(Product product)
{
    using (var controller = new BootstrapperController(product))
    {
        controller.Install();
    }

    var successfulInstallation = InstallationValidator.ValidateInstall(product);
    Assert.That(successfulInstallation, Is.True);
}
public static IEnumerable<TestCaseSource> ProvideTestcases()
{
    yield return new TestCaseData(ProductLastYear).SetCategory("UpdateLastYear");
    yield return new TestCaseData(ProductTwoYearsAgo).SetCategory("UpdateTwoYearsAgo");
}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading