Question Suites multi-couches paramétrées


J'ai actuellement un résumé BaseTest classe qui détient plusieurs génériques @Test's.

public abstract class BaseTest {

    private String expected;
    private String actual;

    public BaseTest(String expected, String actual) {
        this.expected = expected;
        this.actual = actual;
    }

    public String methodToTest(String line) {
        return line.trim();
    }

    @Test
    public void testNull() {
        assertNull(methodToTest(null));
    }

    // more @Tests...
}

SomeTest étend BaseTest, où je définis différents cas de test.

@RunWith(Parallelized.class)
public class SomeTest extends BaseTest {
    // @Parameters (test cases) goes here...
}

J'ai de nombreux tests qui s'étend BaseTest, que j'ai ensuite mis dans un Suite dans RunAllTests.

@RunWith(Suite.class)
@SuiteClasses({ SomeTest.class, AnotherTest.class, etc... })
public class RunAllTests { }

Alors disons que je veux ajouter plus @TestJe veux cependant les contenir dans une classe différente.

public class WhitespaceTest extends BaseTest {

    public WhitespaceTest(String expected, String actual) {
        super(expected, actual);
    }

    @Test
    public void testNewline() {
        assertEquals(expected, methodToTest(actual + "\n"));
    }

    // more @Tests...
}

Il semble que j'ai besoin d'une autre "couche" de Suites pour exécuter chaque test unique, de sorte que pour chaque classe dans RunAllTests, Je cours le BaseTest  ET  WhitespaceTest. Comment puis-je mettre en œuvre cette couche?


10
2017-10-29 17:10


origine


Réponses:


Voici ma solution actuelle (naïve) à ce problème:

Dans BaseTest:

@Test
public void testNewline() {
    WhitespaceTest wt = new WhitespaceTest(expected, actual);
    wt.testNewline();
}

Cela fonctionne, mais il y a beaucoup de code en double. Pour chaque @Test dans WhitespaceTest, vous devez en créer un autre @Test dans BaseTest.


1
2017-10-29 20:30