« Apex共有で所有者と同じロールへレコードを共有する方法 | メイン | 開発者コンソールにテストツールとクエリエディタが増えました »

2012年5月15日 (火)

テストメソッドがアクセスできるデータが変わりました

Spring '12でリリースされたAPI 24.0以降では、テストメソッドは、テストメソッドが作成したデータのみにアクセスできるようになりました

API 23.0(Winter '12)以前は、テストメソッドは組織の全てのデータにアクセスできたので、大きな変更点です。

これまでも、「既存データに依存するテストコードを書いてしまうと、テスト実行時点のデータの状態によって、テストの結果が変ってしまう」という問題がありました。

そのため、テストメソッド内でデータを作成して、そのデータを使ってテストする方法が推奨されていましたが、API 23.0以前では、テストメソッドは組織の全てのデータにアクセスできたので、既存データに依存するテストコードを書くことができてしまいました。

API 24.0以降を使えば、度々見かけるこの問題が生じることはなく、テストコードの品質を高めることができそうです。

○API 23.0以前の挙動

API 23.0 以前のテストコードは、引き続き、組織の全てのデータにアクセスすることができます。Spring '12のリリースが原因で、今まで動作していたテストコードが動作しなくなることはありません。

○API 24.0以降で、組織の全てのデータにアクセスしたい場合

API 24.0以降でも、↓のように「IsTest(SeeAllData=true) アノテーション」を使用することで、組織の全てのデータにアクセスすることができます。

@isTest
private class HogeControllerTest {
    @isTest(SeeAllData=true)
    static void testMethod1() {
        // 組織の全てのデータにアクセス可能
    }
}

○API 24.0以降で、常にアクセス可能なデータ

組織またはメタデータオブジェクトの管理に使用する次のオブジェクトは、そのままテストでアクセスできます。

・User
・Profile
・Organization
・RecordType
・ApexClass
・ApexTrigger
・ApexComponent
・ApexPage

コメント

IsTest(SeeAllData=True)アノテーションを付けないと、データにアクセスできないので下記エラーが表示されます。
List has no rows for assignment to sobject but the object has records
エラーメッセージを頼りに調査していたので、はまってました。

たしかに、API24.0以降でアノテーション付けてないと、原因が分からず、ハマりやすいですよね。

コメントを投稿

コメントは記事の投稿者が承認するまで表示されません。

採用情報

株式会社フレクトでは、事業拡大のため、
・Salesforce/Force.comのアプリケーション開発
・HerokuやAWSなどのクラウドプラットフォーム上
でのWebアプリケーション開発
エンジニア、マネージャーを募集中です。

未経験でも、これからクラウドをやってみたい方、
是非ご応募下さい。

フレクト採用ページへ

会社紹介

  • 株式会社フレクトは、
      ・認定コンサルタント
      ・認定上級デベロッパー
      ・認定デベロッパー
    が在籍している、セールスフォースパートナーです。
    また、heroku partnersにも登録されています。
    herokuパートナー
    株式会社フレクト
    Salesforce/Force.com
    導入支援サービス
    弊社の認定プロフェッショナルが支援致します。
    ・Visualforce/Apexによるアプリ開発
    ・Salesforceと連携するWebアプリ開発
    も承っております。
    セールスフォースご検討の際は、
    お気軽にお問合せください。

Twitter

リファレンス

■Developer's Guide(リファレンス)
・Apex  HTML | PDF | 日本語PDF | ガバナ制限
・Visualforce  HTML | PDF
・Web Services API  HTML | PDF | 日本語PDF
・Bulk API  HTML | PDF
・REST API  HTML | PDF | 日本語PDF
・Metadata API  HTML | PDF
・Migration Tool  HTML | PDF
・AJAX Toolkit  HTML | PDF
・Data Loader PDF | 日本語PDF

■早見表 (日本語)
数式
Apex
Visualforce
Web Services API
Chatter