2011-07-28 14 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

相关问题