Setting Up Data for System.RunAs(User u)

DEX450 - Module 12: Testing Strategies

📄 第 325 页 🎬 视频课程

课程章节介绍

同学们,今天我们来聊聊如何在Salesforce中使用`System.runAs`方法来模拟不同用户的操作,并通过测试来验证我们的代码。我们有两个代码片段需要解释,分别是代码A和代码B。我会一步步引导大家理解这些代码的作用。 ### 代码A的解释 首先,我们来看代码A。这段代码的主要目的是计算今天创建的证书持有记录的总数。具体步骤如下: 1. ,计算记录总数,:我们使用SOQL查询来查找今天创建的证书持有记录。这里需要注意的是,我们没有使用`AllData=TRUE`,所以只会计算当前用户可见的记录。根据我们的测试设置,应该只有两条记录。 2. ,查找TA1用户,:接下来,我们使用SOQL查询来找到名为TA1的用户。TA1是一个培训管理员用户。 3. ,设置用户上下文,:使用`System.runAs(TA1)`,我们将当前的用户上下文切换到TA1用户。这意味着接下来的操作都会以TA1的身份执行。 4. ,调用方法并统计记录,:我们调用`CountDailyCertHeld`方法,这个方法会返回当前用户(即TA1)今天创建的证书持有记录的总数。 5. ,断言验证,:最后,我们使用`System.assertEquals`来验证`CountDailyCertHeld`方法返回的记录数是否与我们之前计算的记录数一致。如果一致,测试通过;如果不一致,测试失败。 ### 代码B的解释 接下来,我们来看代码B。这段代码的目的是验证一个没有证书记录的用户(UA2)在调用`CountDailyCertHeld`方法时,返回的记录数是否为0。具体步骤如下: 1. ,查找UA2用户,:我们使用SOQL查询来找到名为UA2的用户。UA2是一个标准用户,并且没有任何证书记录。 2. ,设置用户上下文,:使用`System.runAs(UA2)`,我们将当前的用户上下文切换到UA2用户。这意味着接下来的操作都会以UA2的身份执行。 3. ,调用方法并统计记录,:我们调用`CountDailyCertHeld`方法,这个方法会返回当前用户(即UA2)今天创建的证书持有记录的总数。由于UA2没有任何证书记录,所以返回的记录数应该是0。 4. ,断言验证,:最后,我们使用`System.assertEquals`来验证`CountDailyCertHeld`方法返回的记录数是否为0。如果是0,测试通过;如果不是0,测试失败。 ### 测试设置方法 在开始测试之前,我们需要设置一些测试数据。这就是`@TestSetup`方法的作用。在这个方法中,我们创建了三个用户: 1. ,培训管理员(TA1),:这是一个拥有管理权限的用户。 2. ,标准用户(UA2),:这是一个拥有两个证书记录的用户。 3. ,标准用户(UA3),:这是一个没有任何证书记录的用户。 通过这种方式,我们可以在测试中使用这些用户来验证我们的代码是否按预期工作。 ### 总结 通过这两段代码,我们学会了如何使用`System.runAs`来模拟不同用户的操作,并通过测试来验证我们的代码。我们首先计算了记录总数,然后切换用户上下文,最后通过断言来验证结果。希望这些内容对大家理解Salesforce中的测试方法有所帮助。如果有任何问题,欢迎随时提问!