Reusable tests

time to read 7 min | 1263 words

It is generally accepted that reusability is not something that you should strive for in your tests. However, I have found that reusing tests is an interesting way to save time when you are testing a full process. Take for instance this piece of code:

[Test]

public void SuccessfullySavingTemplateWillShowConfirmation()

{

    OpenNewTemplateDialog();

    Type("TemplateName", "Template1");

    ClickOkOnNewTemplate();

    WaitForAjax();

    AssertTextPresent("Template saved successfully", "Should have gotten a confirmation message");

}

[Test]

public void CannotAddTemplateWithDuplicateName()

{

    //Create a template called "Template1"

    SuccessfullySavingTemplateWillShowConfirmation();

    CloseSavedTemplateSuccessConfirmation();

    OpenNewTemplateDialog();

    Type("TemplateName", "Template1");

    ClickOkOnNewTemplate();

    WaitForAjax();

    AssertTextPresent("There is already a template called 'Template1', please choose another name.",

            "Should warn when trying to create template with duplicate name");

}

Some of the methods are utility methods, but on the second test, the first line of code actually calls to another tests to do the initialization of the test. I can see this kind of stacking useful in cases where I would usually want to have orderred tests.