テストケースをちょっと書いた
GMOインターネット証券WebServiceクライアントに以下のテストケースを追加しました。
- 通貨ペア一覧取得
- レート一覧取得
- お知らせ一覧取得
- 通常取引(注文/注文情報取得/キャンセル) ※一部のみ
実際のWebサービスに接続してテストします。注文は約定しないように、指値で現在値より5円安い価格を指定して試しています。問題は成り行きと決済注文。どうしたものか。
テストケース
こんな感じです。
#!/usr/bin/ruby $: << "../src" require "runit/testcase" require "runit/cui/testrunner" require "gmoclient" #gmoclientの参照系テスト。 #以下のテストを実際のサーバーに接続し行う。 #実行前にユーザー名/パスワードを設定しておくこと。 # #- 通貨ペア一覧取得 #- レート一覧取得 #- お知らせ一覧取得 # class GmoClient_FxTest < RUNIT::TestCase # ユーザー名 USER_NAME = "user_id" # パスワード PASSWORD = "password" CURRENCY_PAIRS = [ GMO::FX::USDJPY, GMO::FX::EURJPY, GMO::FX::GBPJPY, GMO::FX::AUDJPY, GMO::FX::NZDJPY, GMO::FX::CADJPY, GMO::FX::CHFJPY, GMO::FX::ZARJPY, GMO::FX::EURUSD, GMO::FX::GBPUSD, GMO::FX::AUDUSD, GMO::FX::EURCHF, GMO::FX::GBPCHF, GMO::FX::USDCHF] def setup @client = GMO::Client.new end def teardown end # 通貨ペア一覧取得のテスト def test_list_currency_pairs @client.fx_session(USER_NAME, PASSWORD){|fx| # 全一覧取得 list = fx.list_currency_pairs CURRENCY_PAIRS.each {|code| info = list[code] assert_valid_currency_pair( info, code ) } # GMO::FX::EURJPY, GMO::FX::CADJPY, GMO::FX::AUDUSDを取得 list = fx.list_currency_pairs( [GMO::FX::EURJPY, GMO::FX::CADJPY, GMO::FX::AUDUSD] ) assert_equals list.size, 3 assert_valid_currency_pair( list[GMO::FX::EURJPY], GMO::FX::EURJPY ) assert_valid_currency_pair( list[GMO::FX::CADJPY], GMO::FX::CADJPY ) assert_valid_currency_pair( list[GMO::FX::AUDUSD], GMO::FX::AUDUSD ) } end # 現在のレート一覧取得のテスト def test_list_rates @client.fx_session(USER_NAME, PASSWORD){|fx| list = fx.list_rates CURRENCY_PAIRS.each {|code| info = list[code] assert_valid_rate( info, code ) } } end # お知らせ一覧取得のテスト def test_list_messages @client.fx_session(USER_NAME, PASSWORD){|fx| list = fx.list_messages list.each {|msg| assert_not_nil msg.text assert_not_nil msg.title } } end # 通常注文の発注、変更、キャンセルのテスト def test_basic_order @client.fx_session(USER_NAME, PASSWORD){|fx| list = fx.list_rates # 注文 result = fx.order( GMO::FX::USDJPY, GMO::FX::BUY, 1, { :rate=>list[GMO::FX::USDJPY].bid - 5, # bid-5円で注文。5円急落しないと約定しないので大丈夫? :execution_expression=>GMO::FX::EXECUTION_EXPRESSION_LIMIT_ORDER, :expiration_type=>GMO::FX::EXPIRATION_TYPE_TODAY }) assert_not_nil result.order_no begin # 注文確認 orders = fx.list_orders( GMO::FX::ORDER_CONDITION_ALL, GMO::FX::USDJPY) order = orders[result.order_no] assert_equals order.order_no, result.order_no assert_equals order.enable_change_or_cancel, true assert_equals order.trade_type, GMO::FX::TRADE_TYPE_NEW assert_equals order.sell_or_buy, GMO::FX::BUY assert_equals order.trade_quantity, 10000 # USDJPNなので1万単位 assert_equals order.rate, list[GMO::FX::USDJPY].bid - 5 assert_equals order.execution_expression, GMO::FX::EXECUTION_EXPRESSION_LIMIT_ORDER assert_not_nil order.date assert_equals order.expiration_type, GMO::FX::EXPIRATION_TYPE_TODAY assert_nil order.expiration_date assert_equals order.order_state, GMO::FX::ORDER_STATE_RECEIVED assert_not_nil order.failure_reason, GMO::FX::FAILURE_REASON_NOT_FAILED assert_nil order.settlement_rate assert_nil order.settlement_date ensure # キャンセル fx.cancel_order result.order_no end } end private # 通貨ペアコードに値が設定されているか評価する def assert_valid_currency_pair( info, code ) assert_equals code, info.currency_pair_code assert_not_nil info.name assert_not_nil info.max_trade_quantity.to_i assert_not_nil info.min_trade_quantity.to_i assert_not_nil info.trade_unit.to_i end # レートに値が設定されているか評価する def assert_valid_rate( info, code ) assert_equals code, info.currency_pair_code assert_not_nil info.bid.to_f assert_not_nil info.ask.to_f assert_not_nil info.day_before_to.to_f assert_not_nil info.bid_high.to_f assert_not_nil info.bid_low.to_f assert_not_nil info.sell_swap.to_i assert_not_nil info.buy_swap.to_i assert_not_nil info.date assert_not_nil info.days_of_grant.to_i end end RUNIT::CUI::TestRunner.run(GmoClient_FxTest.suite)