2013-09-25 3 views
0

Я хочу написать мой модульный тест в том же исходном файле, который протестирован (как вы можете это сделать в D http://dlang.org/unittest.html).Включите тест в исходный файл java

Я также хочу иметь возможность запускать тест в eclipse, как я обычно делаю с помощью специального тестового файла.

В этом примере Junit жалуется, если нет общественного конструктора нулевого аргумента:

public class Dummy { 
    private String _name; 

    public Dummy(String name) { 
     _name = name; 
    } 

    public String name() { 
     return _name; 
    } 

    @Test 
    public void testName() throws Exception { 
     assertEquals("dummy", new Dummy("dummy").name()); 
    } 
} 

Любых предложений о том, как поставить метод испытания в «реальном» исходный код и быть в состоянии запустить тест (в другие слова, как обмануть ограничение конструктора no arg)?

Благодаря

+3

Ну сообщение об ошибке ясно, не так ли? Для создания экземпляра теста для тестов JUnit нужен конструктор no-args. У вашего класса нет такого конструктора. Лично я нахожу идею смешения «реального» исходного кода с тестами * сильно * раздражающими - те методы тестирования являются обычными методами, если они находятся в исходном коде, который любой может назвать. –

+0

Наверное, вопрос непонятен; любые предложения о том, как поместить метод теста в «настоящий» исходный код и иметь возможность запускать тест (другими словами, как обмануть ограничение конструктора no arg). –

ответ

0

Для запуска рамки JUnit Test, он внутренне требует конструктор без аргументов, чтобы создать его экземпляр. Обычно он создается по умолчанию, если у вас нет конструктора. Но поскольку у вас есть один конструктор с аргументом, структура не сможет создать экземпляр соответствующего класса для выполнения тестового примера. Чтобы избежать этого, создайте пустой конструктор аргументов.

0

Наличие методов тестирования в том же классе невозможно с JUnit и также довольно странный выбор дизайна. Ну, было бы возможно, если бы у вас был конструктор нулевых аргументов, но тем не менее, тестовый класс не должен быть тестируемым классом. Однако вы можете создать тестовый класс в том же файле для выполнения ваших тестовых случаев.

0

Вы можете создать второй конструктор без параметров, если вы действительно хотите поместить свои тесты JUnit в один класс. Тем не менее это не так, как вы это делаете в соответствии с конвенциями java.

Также он раздувает класс с помощью ненужных тестовых примеров (ненужных для выполнения задачи, которую должен выполнять класс). Вы должны подумать об этом, если не будет лучше поставить тестовые примеры в отдельный класс.

+0

Nope, it doesent work: java.lang.IllegalArgumentException: тестовый класс может иметь только один конструктор на org.junit.runners.model.TestClass. (TestClass.java:37) –

+0

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

1

Вы можете рассмотреть классическую TDD (основанную на книге Кента Бекка «Test Driven Development By Example»), в которой идея заключается не в том, чтобы писать тесты для определенных классов/методов, а для функций, которые вы хотите реализовать.

Таким образом, на производственных классах нецелесообразно вводить тесты.

0

Вы можете написать свой собственный Runner вместо использования JUnit по умолчанию BlockJUnit4ClassRunner. Пожалуйста, дайте мне знать, если вам нужна помощь.

Смежные вопросы