4

私はsalesforce.comプラットフォームでRestWebサービスを開発しています。私はそれを書きました、そしてそれは私がそれを呼ぶときそれがきちんと働いていてそして正確な応答を与えています。問題はそれをどのようにテストするかです

@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;          
    }

}

今の私の仕事は、このRESTWebサービスメソッドをテストすることupdateCaseです。POSTリクエストメソッドをテストするには、メソッド呼び出しでパラメーターを設定する必要がありますが、PUTメソッドの場合-RestContext.requestテストクラスでどのように設定しますか?

4

1 に答える 1

5

ユニットテストで対処しなければならない2つの問題があります。

  • 有効な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', 'blahblah@some.org');
        // Invoke the method directly
        Feedpost9.updateCase();
    }
}

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

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

私は後者の方法を使用することを好みますが、時々私はごまかします...

于 2012-04-06T23:32:04.930 に答える