20-2: Write Unit Tests for Action Methods

DEX450 - Module 20: Testing Visualforce Controllers

📄 第 538 页 🎬 视频课程

课程章节介绍

同学们,今天我们来学习如何为Salesforce中的控制器扩展编写单元测试。特别是,我们要测试“技术员状态”页面的控制器扩展中的两个自定义操作方法。 首先,我们需要理解什么是控制器扩展。在Salesforce中,控制器扩展是一个Apex类,它扩展了标准或自定义控制器的功能。这意味着我们可以在页面上添加更多的逻辑和功能。 现在,假设我们有一个名为`TechnicianStatusController`的控制器扩展,它有两个自定义操作方法:`updateStatus`和`resetStatus`。我们的任务是编写单元测试来验证这两个方法是否按预期工作。 ### 第一步:创建测试类 首先,我们需要创建一个测试类。这个类将包含我们的测试方法。我们可以命名为`TechnicianStatusControllerTest`。 ```apex @isTest public class TechnicianStatusControllerTest { // 这里我们将编写测试方法 } ``` ### 第二步:编写测试方法 接下来,我们需要为每个自定义操作方法编写一个测试方法。我们将使用`@isTest`注解来标记这些方法为测试方法。 #### 测试`updateStatus`方法 假设`updateStatus`方法用于更新技术员的状态。我们可以编写一个测试方法来模拟这个操作,并验证状态是否被正确更新。 ```apex @isTest static void testUpdateStatus() { // 创建测试数据 Technician__c tech = new Technician__c(Name='Test Tech', Status__c='Active'); insert tech; // 实例化控制器扩展 TechnicianStatusController controller = new TechnicianStatusController(new ApexPages.StandardController(tech)); // 调用updateStatus方法 controller.updateStatus(); // 验证状态是否更新 Technician__c updatedTech = [SELECT Status__c FROM Technician__c WHERE Id = :tech.Id]; System.assertEquals('Inactive', updatedTech.Status__c, 'Status should be updated to Inactive'); } ``` #### 测试`resetStatus`方法 假设`resetStatus`方法用于重置技术员的状态。我们可以编写一个测试方法来模拟这个操作,并验证状态是否被重置。 ```apex @isTest static void testResetStatus() { // 创建测试数据 Technician__c tech = new Technician__c(Name='Test Tech', Status__c='Inactive'); insert tech; // 实例化控制器扩展 TechnicianStatusController controller = new TechnicianStatusController(new ApexPages.StandardController(tech)); // 调用resetStatus方法 controller.resetStatus(); // 验证状态是否重置 Technician__c updatedTech = [SELECT Status__c FROM Technician__c WHERE Id = :tech.Id]; System.assertEquals('Active', updatedTech.Status__c, 'Status should be reset to Active'); } ``` ### 第三步:运行测试 编写完测试方法后,我们需要运行这些测试来验证我们的逻辑是否正确。在Salesforce中,你可以通过开发者控制台或使用命令行工具来运行测试。 ### 总结 通过以上步骤,我们为“技术员状态”页面的控制器扩展中的两个自定义操作方法编写了单元测试。这些测试方法帮助我们确保代码的正确性和可靠性。记住,编写单元测试是开发过程中非常重要的一部分,它可以帮助我们及早发现和修复问题。 希望这个讲解对你们有帮助!如果有任何问题,随时提问。