52 lines
1 KiB
C++
52 lines
1 KiB
C++
#include <test/mock.hpp>
|
|
#include <test/test.hpp>
|
|
|
|
using namespace lt::test;
|
|
using namespace lt::test::mock;
|
|
|
|
class ExpensiveClass
|
|
{
|
|
private:
|
|
public:
|
|
virtual int expensive(std::string str, std::optional<int> opt)
|
|
{
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
class MockClass: public ExpensiveClass
|
|
{
|
|
public:
|
|
int expensive(std::string str, std::optional<int> opt) override
|
|
{
|
|
return expensive_mock(str, opt);
|
|
};
|
|
|
|
Mock<int(std::string, std::optional<int>)> 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<int(int)> {};
|
|
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 };
|
|
};
|
|
};
|