私はこれまで Boost.Test を使用してきましたが、代わりに Catch で BDD を使用することを検討していますが、例外を処理する適切な方法を見つけるのに苦労しています。次のようなテストがあるとします。
SCENARIO("connection handling", "[network]") {
boost::asio::io_service io;
GIVEN("a connection that should fail") {
connection::ptr conn = connection::create(new fake_provider<connection_refused>(io));
WHEN("trying to connect") {
conn->connect("localhost", 1);
THEN("connection was refused") {
some stuff to verify exception code
REQUIRE(conn->connected() == false);
}
}
}
}
connect() が適切な方法で例外をスローするという事実を処理する方法を考えています。例外を保存して try-catch に保存し、THEN の下で検証できると思いますが、それはあまり良くないようです。Boost.Test テストケースでは、次のようにしました。
bool error_is_connection_refused(boost::system::system_error ex) {
return ex.code() == boost::system::errc::connection_refused;
}
BOOST_AUTO_TEST_CASE(connect)
{
connection::ptr conn_refuse = connection::create(new fake_provider<connection_refused>(*io_ptr));
BOOST_REQUIRE_EXCEPTION(conn_refuse->connect("localhost", 1),
boost::system::system_error,
error_is_connection_refused);
BOOST_REQUIRE_EQUAL(conn_refuse->connected(), false);
}
しかし、それは非常に BDD ではないようです。BDD テストを使用する場合、例外をスローするコードを通常どのように処理しますか?