У меня проблемы с поиском модульных тестов для методов целевой структуры.
У меня есть метод random_number
, который возвращает случайное значение на основе атрибута структуры, и есть другой метод plus_one
, который берет результат первого метода и что-то с ним делает:
pub struct RngTest {
pub attr: u64,
}
impl RngTest {
pub fn random_number(&self) -> u64 {
let random = 42; // lets pretend it is random
return random * self.attr;
}
pub fn plus_one(&self) -> u64 {
return self.random_number() + 1;
}
}
Имея юнит-тест для первого метода, какова стратегия для тестирования другого? Я хочу смоделировать вывод self.random_number()
для модульного теста plus_one()
, чтобы иметь нормальный код в модульных тестах. Есть хороший пост, в котором сравниваются различные библиотеки-насмешки и делается вывод (что, к сожалению), что ни одна из них не очень хороша, чтобы выделиться среди других.
Единственное, что я узнал, читая инструкции для этих библиотек, - это то, что я могу только посмеяться над методами, переместив их в черту характера. Я не видел ни одного примера в этих библиотеках (я посмотрел на 4 или 5 из них), где они тестируют случай, похожий на этот.
После перемещения этих методов в черту (даже в том виде, в котором они есть), как я могу издеваться над random_number
, чтобы модульно проверить вывод RngTest::plus_one
?
pub trait SomeRng {
fn random_number(&self) -> u64 {
let random = 42; // lets pretend it is random
return random * self.attr;
}
fn plus_one(&self) -> u64 {
return self.random_number() + 1;
}
}
impl SomeRng for RngTest {}