当前位置: 首页 > 知识库问答 >
问题:

Salesforce APEX单元测试错误,使用REST服务/选择案例对象时出错

巫马欣嘉
2023-03-14

我已经成功地使用APEX语言构建了一个REST API,该语言定义了一个注释:@RestResource。

我还编写了一个带有@isTest注释的匹配单元测试过程。使用两个输入参数执行HTTP GET触发的REST API运行良好,而单元测试执行返回SOQL查询产生的“null”值列表,如下所示:

String mycase = inputs_case_number; // for ex. '00001026'   
sObject[] sl2 = [SELECT Id, CaseNumber FROM Case WHERE CaseNumber = :mycase LIMIT 1];

查询返回:

VARIABLE_ASSIGNMENT [22]|sl2|[]|0x1ffefea6

我还尝试使用RunAs()方法(参见下面的代码)执行它,使用动态创建的Salesforce测试用户,不是匿名的,连接到更强大的配置文件,但在SOQL查询中仍然收到“空”答案。新配置文件定义了案例的“查看所有”权限。对结构非常相似的对象(如:“用户”和“UserRecordAccess”)的其他SOQL查询工作正常,无论是对于REST APEX还是Test APEX。

有没有办法配置单元测试(@isTest)的访问权限来读取Case对象和一些字段,如:Id和CaseNumber。这个错误是否与“工具API”功能有关,我们如何在测试过程中解决这个问题?

代码附件:单元测试代码

@isTest
private class MyRestResource1Test {
     static testMethod void MyRestRequest() { 
     // generate temporary test user object and assign to running process
     String uniqueUserName = 'standarduser' + DateTime.now().getTime() + '@testorg.com';
     Profile p = [SELECT Id FROM Profile WHERE Name='StandardTestUser'];
     User pu = new User(Alias='standt',Email='standarduser@testorg.com',LastName='testing',EmailEncodingKey='UTF-8',LanguageLocaleKey='en_US',LocaleSidKey='en_US',ProfileId=p.Id,TimeZoneSidKey='America/New_York',UserName=uniqueUserName);
     System.RunAs(pu) {
          RestRequest req = new RestRequest();
          RestResponse res = new RestResponse(); 
          req.requestURI = '/services/apexrest/sfcheckap/';
          req.addParameter('useremail','testuserid@red.com');
          req.addParameter('casenumber','00001026'); 
          req.httpMethod = 'GET';
          RestContext.request = req;
          RestContext.response = res;
          System.debug('Current User assigned is: ' + UserInfo.getUserName());
          System.debug('Current Profile assigned is: ' + UserInfo.getProfileId()); 
          Test.startTest(); 
          Map<String, Boolean> resultMap = MyRestResource1.doGet(); 
          Test.stopTest();
          Boolean debugflag = resultMap.get('accessPermission');
          String debugflagstr = String.valueOf(debugflag);
          System.assert(debugflagstr.contains('true'));
        }   
    }  
}

共有1个答案

洪飞白
2023-03-14

通过使用找到解决方案路径:@isTest(SeeAllData=true)

请参阅文章:“使用isTest(SeeAllData=true)注释”

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_testing_seealldata_using.htm

 类似资料:
  • 问题内容: 我试图使用sprint-test和模仿对象编写Servlet的单元测试 我的Maven依赖是: org.springframework spring-test 4.0.3.RELEASE 问题答案: 我需要使用javax.selvlet-api替换javaee-api的依赖项,如下所示:

  • 我刚刚添加了测试单元,当我使用运行它时,我得到了错误,测试将失败。但是,当我运行时,一切看起来都很好,我不知道发生了什么黑客。我认为当我使用运行时,无法识别部分文件,并将抛出新的错误。 这是我的代码https://github.com/rohmanhm/unobuilder/tree/test 下面是错误消息。 rohmanhm~/desktop/code/works/unobuilder tes

  • 当使用resharper从视觉工作室运行单元测试时,我得到了以下错误: 在单元测试方法旁边的工具提示中,它说:,我认为它说。Resharper显示一个灰色的眼睛图标。 VisualStudio的测试资源管理器也有一个棘手的问题。它不会显示我所有的单元测试。事实上,它错过了我的200多个单元测试。它们不会出现在测试浏览器窗口中。我确实有一些测试出现了,并且运行得很好。 我已经尝试过的事情:重新启动我

  • 这是对象: 这是控制器方法:

  • 以下是为主页编写的类,http://www.royalmailgroup.com/ 我试图点击“关于我们”链接和FOI联系人。 } } [VerboseTestNG]失败:"sample.keyword.FeeToPayTest"-sample.keyword.FeeToPayTest.testOpenApplication()在9033毫秒内完成[VerboseTestNG]org.openqa

  • 我有一个对象,它通过json POST请求获取参数,以便在数据库中创建一个新条目,但我得到以下错误: 这是控制器 服务