Update from obsidian - thinkpad

Affected files:
.obsidian/plugins/obsidian-omnivore/data.json
Read Later/Git Merge vs Rebase vs Squash ¿Qué estrategia debemos elegir-.md
Read Later/How Game Reviews Actually Affect You.md
Read Later/Let's Get Webby! 🦀 🕸️.md
Read Later/Use cases for Rust.md
Read Later/What the Rust Book didn't tell you about testing....md
Read Later/Why Signals Are Better Than React Hooks.md
books/Book/Caballo de troya.md
books/Book/En el nombre de la rosa.md
notes/coping mechanisms/Good Enough.md
notes/utils/Crear una nueva funcionalidad.md
notes/utils/Git.md
notes/utils/React.md
projects/personal-page-notes/List of Games.md
projects/quests.md
This commit is contained in:
Alexander Navarro 2023-11-05 13:26:21 -03:00
parent c3e2778f4e
commit 784703b79b
15 changed files with 160 additions and 55 deletions

View file

@ -25,8 +25,7 @@ url_original: |
> We can use the [mockall crate](https://letsgetrusty.us6.list-manage.com/track/click?u=9f28b35c1658c447f3b962a54&id=00a07042b3&e=d0eb971086)!
>
> [source](https://omnivore.app/me/what-the-rust-book-didn-t-tell-you-about-testing-18b6707a120#f9650419-c778-4974-9da2-aabce209609f)
---
> ---
## Original
@ -45,14 +44,14 @@ We can use mocking to substitute real objects for mock objects and assert certai
What's that? You want an example? Consider the following code…
trait Database {
fn execute_query(&self, query: String);
}
fn get_user(db: impl Database, id: i32) {
let query = format!("SELECT * from Users where id={}", id);
db.execute_query(query);
}
trait Database {
fn execute_query(&self, query: String);
}
fn get_user(db: impl Database, id: i32) {
let query = format!("SELECT * from Users where id={}", id);
db.execute_query(query);
}
We want to test _get\_user_ without making real database queries.
The solution is to mock the _Database_ trait and assert _execute\_query_ is called with the correct query. But how?
@ -61,34 +60,34 @@ We can use the [mockall crate](https://letsgetrusty.us6.list-manage.com/track/cl
Here is how we would test _get\_user_…
#[cfg(test)]
use mockall::{automock, predicate::*};
#[cfg_attr(test, automock)]
trait Database {
fn execute_query(&self, query: String);
}
fn get_user(db: impl Database, id: i32) {
let query = format!("SELECT * from Users where id={}", id);
db.execute_query(query);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn get_user_executes_correct_query() {
let mut mock_database = MockDatabase::new();
mock_database.expect_execute_query()
.with(eq("SELECT * from Users where id=22".to_owned()))
.once()
.returning(|_x| ());
get_user(mock_database, 22);
}
}
#[cfg(test)]
use mockall::{automock, predicate::*};
#[cfg_attr(test, automock)]
trait Database {
fn execute_query(&self, query: String);
}
fn get_user(db: impl Database, id: i32) {
let query = format!("SELECT * from Users where id={}", id);
db.execute_query(query);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn get_user_executes_correct_query() {
let mut mock_database = MockDatabase::new();
mock_database.expect_execute_query()
.with(eq("SELECT * from Users where id=22".to_owned()))
.once()
.returning(|_x| ());
get_user(mock_database, 22);
}
}
Boom! Now we have a unit test that's fast, reliable, and deterministic!
If you haven't seen my [intro to testing in Rust video](https://letsgetrusty.us6.list-manage.com/track/click?u=9f28b35c1658c447f3b962a54&id=90d4167901&e=d0eb971086) make sure to check it out!