Skip to content

Commit

Permalink
Translate ch12-04-testing-the-librarys-functionality.md via GitLocalize
Browse files Browse the repository at this point in the history
  • Loading branch information
dluschan authored and gitlocalize-app[bot] committed Dec 10, 2023
1 parent 0335f7d commit ab0b45e
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions rustbook-ru/src/ch12-04-testing-the-librarys-functionality.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

### Написание теста с ошибкой

Поскольку они нам больше не нужны, давайте удалим строки с `println!`, которые мы использовали для проверки поведения программы в *src/lib.rs* и *src/main.rs*. Затем в *src/lib.rs* мы добавим модуль `tests` с тестовой функцией, как делали это в [главе 11](ch11-01-writing-tests.html#the-anatomy-of-a-test-function)<!-- ignore -->. Тестовая функция определяет поведение, которое мы хотим проверить в функции `search`: она должна принимать запрос и текст для поиска, а возвращать только те строки из текста, которые содержат запрос. В листинге 12-15 показан этот тест, который пока не компилируется.
Поскольку они нам больше не нужны, давайте удалим инструкции с `println!`, которые мы использовали для проверки поведения программы в *src/lib.rs* и *src/main.rs*. Затем в *src/lib.rs* мы добавим модуль `tests` с тестовой функцией, как делали это в [главе 11]<!-- ignore -->. Тестовая функция определяет поведение, которое мы хотим проверить в функции `search`: она должна принимать запрос и текст для поиска, а возвращать только те строки из текста, которые содержат запрос. В листинге 12-15 показан этот тест, который пока не компилируется.

<span class="filename">Файл: src/lib.rs</span>

Expand All @@ -37,7 +37,7 @@

<span class="caption">Листинг 12-16. Определение функции <code>search</code>, достаточное, чтобы тест скомпилировался</span>

Заметьте, что в сигнатуре `search` нужно явно указать время жизни `'a` для аргумента `contents` и возвращаемого значения. Напомним из [Главы 10](ch10-03-lifetime-syntax.html)<!-- ignore -->, что параметры времени жизни указывают с временем жизни какого аргумента связано время жизни возвращаемого значения. В данном случае мы говорим, что возвращаемый вектор должен содержать срезы строк, ссылающиеся на содержимое аргумента `contents` (а не аргумента `query`).
Заметьте, что в сигнатуре `search` нужно явно указать время жизни `'a` для аргумента `contents` и возвращаемого значения. Напомним из [Главы 10]<!-- ignore -->, что параметры времени жизни указывают с временем жизни какого аргумента связано время жизни возвращаемого значения. В данном случае мы говорим, что возвращаемый вектор должен содержать срезы строк, ссылающиеся на содержимое аргумента `contents` (а не аргумента `query`).

Другими словами, мы говорим Rust, что данные, возвращаемые функцией `search`, будут жить до тех пор, пока живут данные, переданные в функцию `search` через аргумент `contents`. Это важно! Чтобы ссылки были действительными, данные, на которые ссылаются *с помощью* срезов тоже должны быть действительными; если компилятор предполагает, что мы делаем строковые срезы переменной `query`, а не переменной `contents`, он неправильно выполнит проверку безопасности.

Expand Down Expand Up @@ -83,7 +83,7 @@ Rust не может понять, какой из двух аргументов

<span class="caption">Листинг 12-17: Итерация по каждой строке из <code>contents</code></span>

Метод `lines` возвращает итератор. Мы подробно поговорим об итераторах в [Главе 13](ch13-02-iterators.html)<!-- ignore -->, но вспомните, что вы видели этот способ использования итератора в [Листинге 3-5](ch03-05-control-flow.html#looping-through-a-collection-with-for)<!-- ignore -->, где мы использовали цикл `for` с итератором, чтобы выполнить некоторый код для каждого элемента в коллекции.
Метод `lines` возвращает итератор. Мы подробно поговорим об итераторах в [Главе 13]<!-- ignore -->, но вспомните, что вы видели этот способ использования итератора в [Листинге 3-5]<!-- ignore -->, где мы использовали цикл `for` с итератором, чтобы выполнить некоторый код для каждого элемента в коллекции.

#### Поиск в каждой строке текста запроса

Expand Down Expand Up @@ -154,3 +154,9 @@ Rust не может понять, какой из двух аргументов
Отлично! Мы создали собственную мини-версию классического инструмента и научились тому, как структурировать приложения. Мы также немного узнали о файловом вводе и выводе, временах жизни, тестировании и разборе аргументов командной строки.

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


[главе 11]: ch11-01-writing-tests.html#the-anatomy-of-a-test-function
[Главы 10]: ch10-03-lifetime-syntax.html
[Листинге 3-5]: ch03-05-control-flow.html#looping-through-a-collection-with-for
[Главе 13]: ch13-02-iterators.html

0 comments on commit ab0b45e

Please sign in to comment.