2015-10-29 4 views
10

В настоящее время у меня есть аннотация BaseTest класс, который содержит несколько общих @Test.Параметризированные многослойные апартаменты

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... 
} 

SomeTestBaseTest расширяет, где я определяю различные тестовые случаи.

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

У меня есть много тестов, которые распространяются BaseTest, которые я затем положить в Suite в RunAllTests.

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

Итак, давайте скажем, я хочу, чтобы добавить больше @Test «с, но я хочу, чтобы содержать их в другой класс.

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... 
} 

Оказывается, мне нужно еще один «слой» Suites запускать каждый тест, так что для каждого класса в RunAllTests, я бегу BaseTestИWhitespaceTest. Как я могу реализовать этот слой?

+0

не понимаю. Почему вы не можете добавить «WhitespaceTest» в свой текущий пакет? Также, конечно, у вас есть несколько наборов – dkatzel

+0

Я хочу запустить каждый тест в 'WhitespaceTest' для каждого' BaseTest' в текущем пакете. –

+0

Звучит скорее как проблема множественного наследования, чем проблема с набором – dkatzel

ответ

1

Вот мой текущий (наивный) обойти эту проблему:

В BaseTest:

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

Это работает, но есть много повторяющегося кода. За каждые @Test в WhitespaceTest вы должны создать еще @Test в BaseTest.

+0

Я думаю, что это не сработает: вы запускаете BaseTest с набором параметров (ожидаемых, актуальных). Тестирование Whitespaces позволило бы получить еще один набор параметров, чем Testing Null. Возможно, это указывает на сбой дизайна вашего класса BaseTest (он просто отбрасывает ожидаемый/фактический). – CoronA

+0

Это работает, это всего лишь уровень косвенности, который я не хочу. Но да, я сейчас перепроектирую весь свой модуль тестирования на то, что вы рекомендовали ранее на этой неделе. –