JBehave — как написать идемпотентную историю?

Я хочу написать «общую» историю для моих приемочных тестов в JBehave, которая добавляет пользователя, только если он не существует. История «createUser» сама по себе является приемочным тестом. Я хочу сослаться на него с помощью GivenStories, например. на «modifyUser», «deleteUser» и т. д., но я не хочу получать сообщение об ошибке, когда история «createUser» хочет добавить уже существующего пользователя.

Как я могу гарантировать, что «createUser» выполняется только тогда, когда это необходимо? Я не могу найти решение для «условных историй» в JBehave. Я не могу написать историю «createUser» как идемпотентную.


person fracz    schedule 13.02.2013    source источник


Ответы (1)


Это не проблема для самой JBehave — она не будет обрабатываться на этом уровне. Я думаю, вам нужен такой сценарий:

Given user "John" exists with ID 1234
When delete user request for ID 1234 was processed
Then no user entry for ID 1234 should exist

Только в коде привязки к данному шагу вы бы проверили и при необходимости создали пользователя (выполните операцию условной вставки). Это обрабатывается в вашем Java-коде, а не на уровне приемочного теста. Это будет выглядеть примерно так:

@Given("Given user \"$userName\" exists with ID $userId")
public void givenUserExistsWithId(String userName, int userId)
{
    if (!persistence.existsUser(userId))
    {
        persistence.createUser(userId, userName);
    }
}

Таким образом, сценарий является чистым, а код обеспечивает ожидаемое состояние после выполнения данного состояния.

person dertseha    schedule 17.02.2013