May
2006
Тестирование и внутренние классы (inner class)
Posted in: Тестирование кода, Java technologies, J2SE |
При тестировании отдельных классов Java-приложения, многие используют метод main или создают дополнительный тестовый класс. Отдельный класс луч?е использовать при интегральных тестах, а метод main после выпуска новой версии класса/пакета чаще всего нужно удалять.
В этой статье я вновь возвращаюсь к внутренним классам (inner class) для ре?ения описанной вы?е проблемы. На этот раз мы рассмотрим статические внутренние классы.
Статический внутренний класс описывается с модификатором static внутри декларации другого (обрамляющего) класса. Вот пример такого класса:
public class OuterClass {
// ....
public static class TestInnerClass {
public static void main (String[] args) {
// ....
}
}
}
?так, чем нам помогает данное описание при тестировании.
Во-первых, внутренний класс компилируется в отдельный class-файл. В приведенном примере после компиляции мы получим 2 класса: OuterClass.class и OuterClass$TestInnerClass.class. То есть, после окончания тестирования второй class-файл можно просто удалить. Преимущества очевидны, тесты и функционал находятся в одном source-файле.
Во-вторых, класс TestInnerClass имеет доступ ко всем private и protected методам обрамляющего класса. ?ными словами, мы обходим инкапсуляцию для более полного тестирования. Пользуйтесь этой возможностью осторожно.
Если вы знакомы с JUnit-тестированием, вам ничего не ме?ает писать тест-кейсы прямо во внутреннем классе.
Еще про внутренние классы в Java можно прочитать здесь - Внтуренние классы в Java.
Жду ва?их вопросов и комментариев.
5 Comments »
RSS feed for comments on this post. TrackBack URI
Если я не знаю как использовать JUnit, то использование для тестов внутренних классов неплохой выход, сам не додумался бы, спасибо.
чувак, когда пи?е?ь статья, задумайся о том, что твои статья начинающие хакеры читают, а им надо по подробней расписывать…
Стоит также заметить, что static class TestInnerClass имеет доступ только к статическим методам OuterClass, сл-но при инстантиировании new OuterClass() на? внутренний класс не сможет достучаться до его нестатических методов
2 Viking: почему не сможет достучаться? Очень даже сможет… Вы наверное что-то напутали.
позволю предположить, что Viking имел в виду некомпилируемость вот этого:
public class Outer {
void nonStatOuterMethod() {
}
static class StatInner {{
nonStatOuterMethod();
}}
}
но речь ?ла об этом
public class Outer {
void nonStatOuterMethod() {
}
static class StatInner {
public static void main(String[] args) {
Outer o = new Outer();
o.nonStatOuterMethod();
}
}
}