#include #include using namespace lt::test; using namespace lt::test::mock; class ExpensiveClass { private: public: virtual int expensive(std::string str, std::optional opt) { return 0; } }; class MockClass: public ExpensiveClass { public: int expensive(std::string str, std::optional opt) override { return expensive_mock(str, opt); }; Mock)> expensive_mock {}; }; class ExpensiveUser { public: ExpensiveUser(ExpensiveClass &dependency) { dependency.expensive("", 10); } }; // problem #1: matcher functions should construct an invokable object to test against the indexed // argument. Suite raii = "mock_raii"_suite = [] { Case { "happy path won't throw" } = [] { auto a = std::function {}; auto expensive = MockClass {}; auto side_effect = false; expensive.expensive_mock.expect("test", std::nullopt) .apply([&](auto str, auto opt) { side_effect = true; }) .returns(69); auto user = ExpensiveUser { expensive }; }; };