Возможно, меня заменит робот для проверки кода. Есть некоторые отзывы, которые я повторяю снова и снова. Вот некоторые из моих наименее любимых:
Общая структура кода
Брось остальное
Когда if заканчивается return else является излишним и создает ненужные отступы.
|
01
02
03
04
05
06
07
08
09
10
11
|
if (foo) { return bar;} else { return baz;}// should be replaced byif (foo) { return bar;}return baz; |
Массив -> Список -> Поток
|
1
2
3
4
5
6
|
List< ... > list = Arrays.asList(someArray);list.stream(...)// should be replaced by Arrays.stream(someArray) |
Тестовый код
Прежде чем это тяжелый инициализатор
Мы используем метод @Before для настройки сложных объектов, часто там, где нам нужно выполнить обработку, чтобы вычислить, что член экземпляра класса должен иметь в нем. На другом конце спектра это перебор:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
// this is part 1 of twoprivate MyService myService;@Beforepublic void before() { // now initialize myService = new MyService().init(123);}// the above code can be expressed in the initializer// and is simple to read there...// if it threw exceptions or needed some more complex // set up, it wouldn't be// it's in one clear place where we know where to // find itprivate MyService myService = new MyService() .init(123); |
Тестовые броски
|
01
02
03
04
05
06
07
08
09
10
11
12
|
@Testpublic void someTest() throws IOException, JsonException {}// never bother with multiple or specific exception // throws in tests nobody cares and it's just noise// the test runner will catch anything!@Testpublic void someTest() throws Exception {} |
AssertJ для размера
|
1
2
3
4
5
|
// long-windedassertThat(list.size()).isEqualTo(2);// should beassertThat(list).hasSize(2); |
AssertJ для всего
Встроенные утверждения JUnit не так богаты, как предоставляемые AssertJ. Как минимум, я рекомендую использовать некоторую форму assertThat , чтобы в конечном итоге вы не использовали утверждение, которое немного слабовато для ситуации.
Ваш assertEquals — неправильный путь
В 60% случаев, когда я assertEquals код с assertEquals , порядок неверный. Подсказка: используйте AssertJ !!! Юнит не прав в этом! Мы должны читать слева направо.
|
1
2
3
4
5
|
// wrong:assertEquals(something.getFoo(), 123);// it's expected IS actualassertEquals(123, something.getFoo()); |
Mockito Static Imports
|
1
2
3
4
5
|
// this is not normalMockito.verify(mock).called();// static import all mockito methodsverify(mock).called(); |
Mockito Times (1)
|
1
2
3
4
5
6
7
|
// this is a tautologyverify(mock, times(1)).called();// look at what verify(mock) does internally// replace withverify(mock).called(); |
|
Смотрите оригинальную статью здесь: Неэффективная Java Мнения, высказанные участниками Java Code Geeks, являются их собственными. |