Как правильно протестировать многошаговый процесс в проекте Java Spring / Hibernate / Maven? - PullRequest
0 голосов
/ 06 марта 2012

Изначально у меня был только сервлет Java, необходимый для модульного тестирования. Я хотел убедиться, что он будет правильно обрабатывать запросы, поэтому я использовал Spring MockHttpServletRequest в тесте jUnit, и этот метод отлично работал. Очень простой юнит-тест.

Теперь я хочу расширить тест и выполнить серию транзакций базы данных и смоделировать запросы сервлетов http, чтобы моделировать пользователей, использующих систему в течение определенного периода времени.

Полагаю, я мог бы втиснуть все это в один модульный тест, но это не совсем правильно, поскольку это нарушило бы дух модульного теста.

Так, как правильно проверить серию событий в определенном порядке, подобном этому?

Вот урезанная версия того, что у меня есть:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"testContext.xml"}) 
public class servletTest {

//Injected request
@Resource(name="mockTestServletRequest")
MockHttpServletRequest request;

@Test
public void mockRequest() {
    //perform a mock servlet request
}

Так можно ли имитировать временную шкалу событий, просто добавляя больше методов с аннотацией @Test выше и ниже того, что у меня уже есть? Я гарантированно, что эти методы будут выполняться в указанном порядке?

Ответы [ 2 ]

3 голосов
/ 06 марта 2012

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

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

0 голосов
/ 06 марта 2012

С точки зрения менталитета тестирования, я согласен с вами в том, что настоящий модульный тест должен быть именно таким: что-то, что проверяет одну точку прикосновения в коде, а не за ее пределами.

Поскольку вы используете Maven, у вас действительно есть несколько приятных опций. Рекомендация здесь на codehaus может быть полезной. Благодаря модульности ваших «Интегрированных модульных тестов» вы можете назначить их для отдельной цели и позволить своим более интеллектуальным и организованным тестам жить там.

Другой вариант, который я использовал, - добавление аннотации к тесту следующим образом:

@IfProfileValue(name="integration", value="true")

Это позволяет вам задавать аргументы относительно того, следует ли запускать только ваши истинные модульные тесты или интеграционные тесты.

Наконец, если вы используете базу данных для разработки и хотели бы продолжать это делать, это нормально, но если это непрерывный тест, и вы не откатываетесь назад, вы, возможно, будете хорошо обслуживаться Mockito или еще одна насмешливая основа. Это действительно зависит от контекста вашего теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...