Паттерны именования UI тестов в Java

Принцип именования должен быть одинаков для всего проекта и отличаться от именования обычных классов, методов. Именовать тесты нужно таким образом, чтобы не возникало вопросов, что данный тест проверяет. Именно поэтому обычно используется определенный паттерн для именования UI тестов.

Паттерн для тестовых классов

Тут все просто.

{Фича/Экран/Страница}Test

Для некоторые плагинов запуска тестов, например maven-surefire-plugin, нужно чтобы в тестах было что-то определенное, чтобы их отличать. Для того же maven-surefire-plugin все тестовые классы должны удовлетворять паттерну:

**/Test*.java
**/*Test.java
**/*Tests.java
**/*TestCase.java

Паттерн для тестовых методов

Тут сложнее:

префикс{ОписаниеРезультата}{КакимДействием}

если конкретнее:

should{ОписаниеРезультата}{КакимДействием}

Почему should?

Во времена junit3 все тесты начинались с test, так как в ранних версиях java (1.4) не было аннотаций. Выглядело это так:

//тестируем{Что-то}{КакимОбразом}
test{Something}{SomeAction}

С выходом junit4, ограничение на название теста исчезло, при этом тест, начинающийся с test, выглядел (субъективно) странно:

@Test
//тестируем{Что-то}{КакимОбразом}
test{Something}{SomeAction}

Почему все же should? Именование теста с should подразумевает, что после него будет описан результат. К тому же should - более гибок в применении.

Примеры

//должныУвидеть{Что-то}После{Какого-тоДействия}
@Test
shouldSee{Something}After{SomeAction}
//должны{ДелатьЧто-то}На{Каком-тоЭкранеСтранице}
@Test
should{DoSomething}On{SomePage/Screen}
//должноБыть{Состояние}Когда{Что-тоСлучилось}
@Test
shouldBe{Something}When{SomethingHappend}

и так далее