В шаблоне «Сценарий» взаимодействия не предназначены для возврата значений, просто для выполнения некоторых действий в тестируемой системе.Вы используете Вопросы для запроса состояния системы.Было бы проще, если бы вы поделились общей проблемой, которую вы пытаетесь решить, но поскольку ваш пример касается запросов пользователей, у вас может быть тест, который проверяет, что вы можете добавить пользователя в систему через страницу администрирования пользовательского интерфейса:
@Test
public void add_a_user_to_the_system() {
Actor ada = Actor.named("Ada").describedAs("an admin");
when(ada).attemptsTo(
AddANewUser.called("Jack")
);
then(ada).should(
seeThat(KnownUsers.inTheSystem(),
contains(hasProperty("name", equalTo(("Jack"))))
)
);
}
(Возможно, в этом случае было бы более эффективно искать пользователя по имени, но я хотел бы сохранить его близким к вашему примеру).
Для этого у вас может бытьAddANewUser
класс, который использует административные экраны для добавления нового пользователя:
class AddANewUser implements Performable {
public static Performable called(String userName) {
return instrumented(AddANewUser.class, userName);
}
private final String userName;
AddANewUser(String userName) {
this.userName = userName;
}
@Override
public <T extends Actor> void performAs(T actor) {
// Add a new user called userName via the UI
}
}
Затем вы можете проверить, существует ли этот пользователь, используя вопрос:
@Subject("known users")
static class KnownUsers implements Question<List<ApplicationUser>> {
public static KnownUsers inTheSystem() { return new KnownUsers(); }
@Override
public List<ApplicationUser> answeredBy(Actor actor) {
// Query the database and convert the result set to ApplicationUsers
return ...;
}
}
Вы также можете создатьКласс возможности централизовать запросы JDBC, учетные данные и т. Д.