2011-07-28 15 views
1

我正在爲一個只返回值的函數編寫測試 - 就是這樣。我不知道你怎麼能做到這一點。我的印象是你必須使用system.assert或其他東西。 SFDC新手,但已編程許多其他語言。以下是一些示例代碼:如何爲簡單的用戶代理查找編寫salesforce測試類?

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

沒有直接回答,因爲Paddslacker覆蓋,但我不建議你檢查出的Apex郎(http://code.google.com/p/ apex-lang /) - 在許多其他事情中,它有單元測試的一些有用的類。他們本身並不涉及你的案例,但是要解決其他問題,比如測試Web服務調用等。 – 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平臺上使用另一種方法。

編輯:爲了完整起見,我添加了示例測試來澄清事情。我的例子展示瞭如何重構生產代碼以使其可測試,但沒有舉例說明如何編寫OP所要求的測試。

你的測試將是這個樣子:

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

相關問題