概要
Facebook Graphにアクセスするようなアプリのユニットテストしようと思ったときに、アプリのテスト専用ユーザーのユーザーアクセストークンをユニットテストの中で参照したいと言うことがあると思います。
(例えば、テストユーザーとしていいねしたり投稿したりするなど)。
C#のFacebook SDKを使って簡単に実装できたので紹介します。
実際のコード
コードのステップとしては、次のようになっています。
- まずは、Facebookアプリのアクセストークンを取得
- アプリのアクセストークンを元に、アプリに属しているテストユーザーのアクセストークン等を含むデータを読み出し
- 2で取得したテストユーザーのユーザーアクセストークンを使って、投稿したりいいねしたりするなど、ユニットテストで必要な動作を行う
// まずはアプリアクセストークンを取得する
var fb = new FacebookClient();
dynamic result = fb.Get("oauth/access_token", new
{
client_id = appId, //FacebookアプリのID
client_secret = appSecret, //FacebookアプリのSecret
grant_type = "client_credentials"
});
//取得したアプリアクセストークンを使うようにFacebookClientに設定
fb.AccessToken = result.access_token;
//次にアプリに属すテストユーザーのデータを読み出す
dynamic testUsers = fb.Get($"/{appId}/accounts/test-users");
//最後に、テストユーザーのID(例えば"123455555")を元に、ユーザーアクセストークンを取り出す
var userToken = ((IEnumerable<dynamic>)testUsers.data).FirstOrDefault(_ => _.id == "123455555").access_token;
// 後は、ユーザーアクセストークンを元に投稿するなどする
fb.AccessToken = userToken;
fb.Post("/me/feed", new { message = "hello from unit test" });
備考
上の例ではdynamic型でSDKの戻り値を受けていますが、Facebook SDK for .NETの戻り値で型付けを利用する を参考に、戻り値を型付けした状態で使うのもありです。