2012-04-05 5 views
4

私はsalesforce.comプラットフォームでレスト・ウェブ・サービスを開発中です。私はそれを書いて、それが正しく働いていると私はそれを呼び出すときに正確な応答を与える。問題は、今私のタスクは、このREST WebサービスメソッドupdateCaseをテストすることですセールスフォース・ドットでレスト・ウェブ・サービスをテストする

@RestResource(urlMapping='/feedpost/*') 

    global class Feedpost9 
    { 
     @HttpPut 
     global static User updateCase() { 
     RestRequest req=RestContext.request; 
     User user=[SELECT id from User where email=:req.headers.get('email') LIMIT 1]; 
     return user;   
    } 

} 

それをテストする方法です。 POSTリクエストメソッドをテストするには、メソッド呼び出しでパラメータを設定する必要がありますが、PUTメソッドの場合はどうすればテストクラスにRestContext.requestを設定するのですか?

+1

Salesforceのスタック交換がこの –

答えて

5

あなたのユニットテストではと競合しなければならない二つの問題があります。

  • 有効RestRequest
  • の必要性は、ここでのテスト環境でのデータ

の欠如は、基本的な技術でありますあなたのメソッドが望む要求オブジェクトを設定するまで

global class Feedpost9 { 

    // your methods here... 

    static testMethod void testRest() { 
     // set up the request object 
     System.RestContext.request = new RestRequest(); 
     RestContext.request.requestURI = '/feedpost/whatever'; 
     RestContext.request.addHeader('email', '[email protected]'); 
     // Invoke the method directly 
     Feedpost9.updateCase(); 
    } 
} 

もう1つのpあなたが持っている可能性が高いのは、Salesforce v24以降では、デフォルトでユニットテストがデータにアクセスできないということです。これは、単体テストがデータを持たない種類のサンドボックスで実行されるためですが、にはにメタデータ(RecordTypesなど)が含まれています。したがって、テストにデータを取得するには2つの方法があります。

  1. @isTest(SeeAllData=true)アノテーションを使用してください。これにより、テストメソッドがデータにアクセスできるようになります。
  2. テストメソッドをビルド/挿入してから、そのデータに対してテストを実行してください。テストが終了すると、テストデータがデータベースから奇妙に消えてしまいます。

あなたは例えば管理として(このコードを配布することを計画している場合

+2

ような質問のための絶好の場所です...私は後者の方法を使用することを好むが、時々私はカンニングパッケージ)、自分のテストデータを作成することを強くお勧めします。あなたのコードを持っている組織が、必要なテストデータをすでに持っているかどうかは分かりません。 –

+1

テストのために既存のデータを使用することは、あなたを将来的に噛んでしまう怠惰な修正です。テストデータを正しく作成する時間がない場合は、開発プロセスを修正してください。 私がSeeAllDataを使用することを知っている正当な理由は、データ検証テストのためだけです。 – Acuariano

関連する問題