Модульное тестирование стиля класса
При написании юнит-тестов я всегда extends Assert
поэтому у меня есть безусловный доступ ко многим звонкам ко многим Assert.assertXXX
методы:
Например:
public class MyTestClass extends Assert {
@Test
public void SomeTest() {
assertNotNull(""); // instead of Assert.assertNotNull("");
}
}
простирающийся Assert
спасает меня печатать Assert.assertNotNull("");
, Assert.
На мой взгляд, загромождает код, потому что вы часто его используете.
Моим тестовым классам редко нужно расширять другой класс, и если они это делают, я склоняюсь к тому, чтобы суперкласс расширял Assert.
Однако создается впечатление, что я нарушаю какой-то стиль кодирования, чтобы расширить его, чтобы избежать импорта и квалификации.
Это "плохой" стиль кодирования?
Если я это сделаю, это все еще код "лучшей практики", потому что это всего лишь тестовый класс?
Редактировать:
import static org.junit.Assert.*;
Не работает, потому что мой форматировщик кода Eclipse разрешает все операции импорта, поэтому такая строка зарезается и заменяется отдельными операциями импорта для всех методов, которые фактически используются каждый раз, когда я сохраняю данные, что оставляет меня для повторного импорта, если я использую новый метод assert.
Следует признать, что через некоторое время кодирования тестового класса необходимость в импорте новых методов уменьшается, но при кодировании нового тестового класса это становится проблемой.
6 ответов
Нет, делай так:
import static org.junit.Assert.*;
public class MyTestClass {
@Test
public void SomeTest() {
assertNotNull("");
}
}
Лично мне не нравится расширять классы, если мне это не нужно. Рассматривали ли вы использование статического импорта используемых вами методов? С другой стороны, я бы порекомендовал попробовать утверждения Fest для более приятных и читабельных тестов.
Это плохой стиль для расширения класса, если не нужен полиморфизм. Это похоже на то, что Sun называет постоянным интерфейсом Antipattern. Как вы можете видеть на этой странице, статические операторы импорта были добавлены в язык специально для предотвращения этого.
Лично я просто пишу Assert.assertNotNull(value)
, Это не много печатать, и я не чувствую, что это ухудшает читабельность.
Если вы настаиваете на использовании неквалифицированных методов, вы должны импортировать каждый метод со статическим импортом, поскольку оператор импорта, заканчивающийся на "*", также считается плохим стилем. Если кто-то еще придет, чтобы поддержать ваш код (или если вы вернетесь через шесть месяцев, чтобы посмотреть его), импорт, заканчивающийся на "*", потребует от сопровождающего выполнить некоторую детективную работу, чтобы выяснить, откуда приходит метод, в то время как явный импорт сразу дает понять, откуда берется метод.
У меня была та же проблема - но ее легко решить:
Используйте, как говорят другие:
import static org.junit.Assert.*;
public class MyTestClass {
@Test
public void SomeTest() {
Assert.assertNotNull("");
}
}
Здесь идет самая важная часть:
И перейдите к: Window->Preferences, Java->Code Style->Organize Imports, "Количество статических импортов, необходимых для.* (Например," java.lang.Math.*'):" -> изменить на 0.
Теперь ваш форматировщик кода не изменит импорт ".*" На импорт "одного класса".
Или, если вы не фанат '.*'-import:
Import static org.junit.Assert;
public class MyTestClass {
@Test
public void SomeTest() {
Assert.assertNotNull("");
}
}
Прежде всего: вы задаете этот вопрос, чтобы вы тоже могли видеть, что ваш путь неверен:), как все говорили, это следует делать с помощью статического импорта. это правильный путь. период.
правильный вопрос - как заставить затмение помогать вам, а не вмешиваться. Есть как минимум два пути. сначала вы можете установить пороговые значения, когда eclipse должен расширить import xxx.*. просто измените его, и вы можете получить свой ххх. * Другой способ - добавить утверждения в контекстную помощь. Таким образом, Eclipse предложит вам использовать ваши утверждения без необходимости их импорта.
и мой путь: не используйте утверждения junit. используйте fest assert 2.0. вы можете просто статический импорт xxx.assertThat и все.