2011-07-28 10 views
1

私は値を返す関数のテストを書くつもりです。それだけです。私はあなたがそれをどうやってできるかはわかりません。私はあなたがsystem.assertか何かを使わなければならないという印象を受けています。 SFDCは初めてですが、他の多くの言語でプログラミングされています。ここにいくつかのサンプルコードがあります:シンプルなユーザーエージェント検索のためのセールスフォーステストクラスを作成するにはどうすればよいですか?

static String getBrowserName() 
{ 
String userAgent = ApexPages.currentPage().getHeaders().get('User-Agent'); 
    if (userAgent.contains('iPhone')) 
     return 'iPhone-Safari'; 
    if (userAgent.contains('Salesforce')) 
     return 'Salesforce'; 
    if (userAgent.contains('BlackBerry')) 
     return 'BlackBerry'; 
    if (userAgent.contains('Firefox')) 
     return 'Firefox'; 
    if (userAgent.contains('Safari')) 
     return 'Safari'; 
    if (userAgent.contains('internet explorer')) 
     return 'ie'; 
    return 'other'; 
} 

どのようにして100%テストカバレッジを取得できますか?

+0

ない直接的な答えが、私はあなたがアペックスラング(http://code.google.com/p/をチェックアウトをお勧めします:

あなたのテストでは、次のようになりますapex-lang /) - 他の多くのものの中には、ユニットテストのためのいくつかの有用なクラスがあります。彼らはここであなたのケースに対処するのではなく、ウェブサービスコールなどのテストのような他のものに対処します。 – jkraybill

答えて

4

ページコントローラーのようなものをテストするときに、ジャンプをしなければならないため、Salesforceのモックフレームワークが欠点となっていますが、ここでテストしたいものについて考えることが重要です。あなたが特にテストしたいことは、ユーザエージェントがあなたのコードは、適切な文字列を返す文字列を持つ、私は以下のようなものが動作するはずだと思うことであると仮定すると:

static String getBrowserName(string userAgentStringToTest) 
{ 
    PageReference pageRef = getPageReference(userAgentStringToTest); 
    String userAgent = getUserAgent(pageRef); 
    ... 
} 

PageReference getPageReference(string userAgentStringToTest) 
{ 
    if(userAgentStringToTest.Length == 0) 
    { 
     return ApexPages.currentPage(); 
    } 
    else 
    { 
     PageReference pageRef = new PageReference('someURL'); 
     pageRef.getHeaders().put('User-Agent', userAgentStringToTest); 
     return pageRef; 
    } 
} 

String getUserAgent(PageReference pageRef) 
{ 
    pageRef.getHeaders().get('User-Agent'); 
} 

あなたは空の文字列でgetBrowserNameメソッドを呼び出しますプロダクションコードとテストコードでテストしたい文字列を入力します。

もちろん、これにはいくつかの味があります。メソッドをオーバーロードし、メインコードのパラメータなしメソッドとテスト用のパラメータ化メソッドを持つことができます。理想的ではありませんが、私は現在force.comプラットフォームでこれを行う別の方法を知らない。

EDIT:完全性のために、私は物事を明確にするためのサンプルテストを追加しています。私の例は、生産コードをテスト可能にするためにリファクタリングする方法を示しましたが、OPのようにテストを書く方法の例は示しませんでした。 Paddslackerがいることをカバーするので、

static testMethod void checkIPhoneBrowser() 
{ 
    String actualBrowserName = getBrowserName('string containing iPhone somewhere'); 
    String expectedBrowserName = 'iPhone-Safari'; 
    System.assertEquals(expectedBrowserName , actualBrowserName); 
} 

static testMethod void checkIEBrowser() 
{ 
    String actualBrowserName = getBrowserName('string containing internet explorer somewhere'); 
    String expectedBrowserName = 'ie'; 
    System.assertEquals(expectedBrowserName , actualBrowserName); 
} 

... 
+0

ありがとう、パディー!あなたの助けを借りて私はそれを理解することができました。 :) – Darkenor

+0

あなたは大歓迎です。他の読者のための答えにもう少し詳しく説明します。実際にはテストコード自体を書いたことがないことに気付きました。生産コードをテスト可能にするためにリファクタリングする方法を示しました。 – Paddyslacker

関連する問題