generated from wessel/boilerplate
fix(FinalGradeDeterminator): Add mock class for DatabaseManger
The mock class is used to bypass the blocking error of the FinalGradeDeterminator when no Database is present for testing purposes
This commit is contained in:
@@ -12,6 +12,36 @@
|
||||
using namespace std::chrono_literals;
|
||||
using namespace assignments::one::final_grade_determinator;
|
||||
|
||||
namespace assignments::one {
|
||||
|
||||
class FakeDatabaseManager : public DatabaseManager {
|
||||
public:
|
||||
explicit FakeDatabaseManager(rclcpp::Logger logger = rclcpp::get_logger("fake_db"))
|
||||
: DatabaseManager(logger) {}
|
||||
|
||||
bool is_connected() const override {
|
||||
return true; // Always pretend we are connected
|
||||
}
|
||||
|
||||
bool store_final_course_result(const StudentCourse& sc, int exam_count, int final_grade) override {
|
||||
stored_results_.push_back({sc, exam_count, final_grade});
|
||||
return true; // Always succeed
|
||||
}
|
||||
|
||||
void init_database() override {
|
||||
// No-op for fake
|
||||
}
|
||||
|
||||
struct StoredResult {
|
||||
StudentCourse sc;
|
||||
int exam_count;
|
||||
int final_grade;
|
||||
};
|
||||
std::vector<StoredResult> stored_results_;
|
||||
};
|
||||
|
||||
} // namespace assignments::one
|
||||
|
||||
class FinalGradeDeterminatorTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override {
|
||||
@@ -53,12 +83,14 @@ protected:
|
||||
|
||||
void TearDown() override {
|
||||
final_grade_determinator_.reset();
|
||||
fake_db_.reset();
|
||||
test_node_.reset();
|
||||
rclcpp::shutdown();
|
||||
}
|
||||
|
||||
void create_final_grade_determinator() {
|
||||
final_grade_determinator_ = std::make_shared<FinalGradeDeterminator>();
|
||||
fake_db_ = std::make_unique<assignments::one::FakeDatabaseManager>();
|
||||
final_grade_determinator_ = std::make_shared<FinalGradeDeterminator>(std::move(fake_db_));
|
||||
}
|
||||
|
||||
void spin_some_time(std::chrono::milliseconds duration = 100ms) {
|
||||
@@ -71,13 +103,12 @@ protected:
|
||||
std::this_thread::sleep_for(10ms);
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<assignments::one::FakeDatabaseManager> fake_db_;
|
||||
std::shared_ptr<rclcpp::Node> test_node_;
|
||||
std::shared_ptr<FinalGradeDeterminator> final_grade_determinator_;
|
||||
rclcpp::Subscription<g2_2025_interfaces::msg::Student>::SharedPtr student_subscriber_;
|
||||
rclcpp::Publisher<g2_2025_interfaces::msg::Exam>::SharedPtr exam_publisher_;
|
||||
rclcpp::Service<g2_2025_interfaces::srv::Exams>::SharedPtr grade_calculator_service_;
|
||||
|
||||
std::vector<g2_2025_interfaces::msg::Student> received_student_messages_;
|
||||
std::vector<g2_2025_interfaces::srv::Exams::Request> service_requests_;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user