DEX450

Module 20: Testing Visualforce Controllers

课程介绍

今天我们来聊聊Salesforce中的“测试视觉力量”和“控制器”。这两个概念听起来可能有点复杂,但其实它们都是为了帮助我们更好地管理和展示数据。 首先,我们来说说“测试视觉力量”。在Salesforce中,视觉力量(Visualforce)是一种用来创建自定义用户界面的技术。你可以把它想象成一个画布,你可以在上面画出你想要的任何界面元素,比如按钮、表格、图表等等。但是,画好了之后,我们怎么知道它能不能正常工作呢?这就需要“测试”了。测试视觉力量,就是通过编写一些代码来模拟用户的操作,看看这些界面元素是否能够按照我们的预期来工作。比如,点击一个按钮,看看它是否能正确地提交数据,或者显示我们想要的信息。 接下来,我们聊聊“控制器”。控制器是视觉力量页面的“大脑”。它负责处理用户的输入,比如点击按钮、填写表单等,然后根据这些输入来决定页面应该显示什么内容。你可以把控制器想象成一个指挥家,它指挥着页面上的各个元素,让它们按照一定的规则来工作。控制器通常是用Apex语言编写的,Apex是Salesforce的一种编程语言,专门用来处理业务逻辑。 总结一下,测试视觉力量是为了确保我们的自定义界面能够正常工作,而控制器则是这些界面的“大脑”,负责处理用户的输入和决定页面的显示内容。希望这个解释能帮助你更好地理解这两个概念。如果你有任何问题,随时问我哦!

课程章节

本课程共有 24 个章节

  • 1

    Module 20: Testing Visualforce Controllers

    第 521 页

    今天我们来聊聊Salesforce中的“测试视觉力量”和“控制器”。这两个概念听起来可能有点复杂,但其实它们都是为了帮助我们更好地管理和展示数据。 首先,我们来说说“测试视觉力量”。在Salesforce中,视觉力量(Visualforce)是一种用来创建自定义用户界面的技术。你可以把它想象成一个画布,你可以在上面画出你想要的任何界面元素,比如按钮、表格、图表等等。但是,画好了之后,我们怎么知道它能不能正常工作呢?这就需要“测试”了。测试视觉力量,就是通过编写一些代码来模拟用户的操作,看看这些界面元素是否能够按照我们的预期来工作。比如,点击一个按钮,看看它是否能正确地提交数据,或者显示我们想要的信息。 接下来,我们聊聊“控制器”。控制器是视觉力量页面的“大脑”。它负责处理用户的输入,比如点击按钮、填写表单等,然后根据这些输入来决定页面应该显示什么内容。你可以把控制器想象成一个指挥家,它指挥着页面上的各个元素,让它们按照一定的规则来工作。控制器通常是用Apex语言编写的,Apex是Salesforce的一种编程语言,专门用来处理业务逻辑。 总结一下,测试视觉力量是为了确保我们的自定义界面能够正常工作,而控制器则是这些界面的“大脑”,负责处理用户的输入和决定页面的显示内容。希望这个解释能帮助你更好地理解这两个概念。如果你有任何问题,随时问我哦!

    查看详情
  • 2

    Testing Visualforce Controllers

    第 522 页

    让我们来聊聊如何测试Visualforce控制器。首先,Visualforce控制器是Salesforce中用来处理页面逻辑的部分,它负责与视图(也就是用户看到的页面)进行交互。为了确保控制器能够正常工作,我们需要对它进行测试。 首先,你需要了解控制器是如何与视图交互的。简单来说,控制器会接收用户在页面上输入的数据,处理这些数据,然后返回结果给视图显示。测试这一部分,就是要确保控制器能够正确地接收和处理数据。 接下来,我们要测试控制器的构造器。构造器是控制器初始化时调用的方法,它负责设置控制器的初始状态。测试构造器就是要确保控制器在创建时能够正确地初始化所有必要的变量和对象。 然后,我们需要测试控制器的动作方法、getter和setter。动作方法是用户点击按钮或链接时触发的方法,它们通常包含主要的业务逻辑。Getter和setter是用来获取和设置控制器属性的方法。测试这些方法就是要确保它们能够正确地执行预期的操作,并且属性能够正确地被获取和设置。 最后,我们需要测试控制器的属性。属性是控制器中存储数据的变量。测试属性就是要确保这些变量能够正确地存储和返回数据。 总结一下,测试Visualforce控制器主要包括测试它与视图的交互、构造器、动作方法、getter、setter和属性。通过这些测试,我们可以确保控制器能够正常工作,从而为用户提供流畅的体验。希望这些信息对你有帮助!

    查看详情
  • 3

    Module Agenda - 523

    第 523 页

    同学们,今天我们来聊聊Salesforce中的Visualforce控制器测试。这个模块的内容非常实用,能帮助我们确保我们的Visualforce页面和控制器能够正常工作。 首先,我们要了解什么是Visualforce控制器测试。简单来说,就是写一些代码来检查我们的控制器是否按预期工作。这包括检查控制器的构造器、行动方法以及Getters和Setters。 接下来,我们会学习如何测试Visualforce控制器的构造器。构造器是控制器初始化时调用的方法,我们需要确保它在各种情况下都能正确初始化控制器。 然后,我们会讨论如何测试行动方法。这些方法是用户与页面交互时调用的,比如点击按钮或提交表单。我们需要确保这些方法能够正确处理用户输入并返回正确的结果。 最后,我们会学习如何测试Getters、Setters和属性。这些是控制器中用来获取和设置数据的方法和属性。我们需要确保它们能够正确地读取和写入数据。 通过这些测试,我们可以大大提高我们的Visualforce页面的稳定性和可靠性。希望这些内容对你们有所帮助,让我们开始吧!

    查看详情
  • 4

    Visualforce Controllers are Like Other Apex Classes

    第 524 页

    让我们来聊聊Visualforce控制器的测试。想象一下,你正在开发一个在线调查问卷,这个问卷有三个页面,都是用Visualforce做的,而且它们共享同一个控制器。现在,假设用户在第一页没有填写任何信息就点击了保存按钮,这时候应该会出现一个错误页面。 在测试这个功能时,我们不能让真实的用户去点击页面,所以我们需要写一些代码来模拟用户的行为。这里有几个关键步骤: 1. ,设置页面,:首先,我们需要告诉测试代码从哪个页面开始。我们可以使用`PageReference`类来指定页面,比如`Page.firstPage`,然后使用`Test.setCurrentPage`方法将这个页面设置为当前页面。 2. ,实例化控制器,:页面准备好了,但控制器还没有。我们需要创建一个控制器的实例,比如`QuestionnaireController`。 3. ,模拟用户操作,:接下来,我们需要模拟用户点击保存按钮的行为。这可以通过直接调用控制器的`save`方法来实现。这个方法会返回一个页面URL,我们可以通过`getUrl`方法获取这个URL。 4. ,验证结果,:我们需要检查是否正确地跳转到了错误页面。我们可以使用`System.assertEquals`来比较`save`方法返回的URL和我们预期的错误页面URL是否一致。 5. ,模拟用户输入,:如果用户提供了输入,我们需要在页面URL中添加参数来模拟这一点。比如,我们可以使用`ApexPages.currentPage().getParameters().put`来添加参数。 6. ,重新实例化控制器并测试,:添加参数后,我们需要重新实例化控制器,并再次调用`save`方法,确保一切正常工作。最后,我们再次使用`System.assertEquals`来验证是否跳转到了正确的页面。 通过这些步骤,我们可以确保我们的控制器在各种情况下都能正确地处理用户的输入和操作。这就是测试Visualforce控制器的基本流程。希望这能帮助你更好地理解和应用这些概念!

    查看详情
  • 5

    What's Different About Testing Controllers?

    第 525 页

    让我们来聊聊Salesforce中的测试控制器,特别是与Visualforce页面和用户交互相关的内容。首先,我们要明白,控制器在Salesforce中扮演着非常重要的角色,它就像是页面的“大脑”,负责处理数据和用户的操作。 当我们创建一个Visualforce页面时,控制器会自动被实例化,也就是说,系统会自动调用控制器的构造函数来设置页面。这个构造函数会初始化一些必要的变量和对象,确保页面加载时一切就绪。 在页面上,我们通常会使用一些元素,比如文本框、按钮等。这些元素可以通过调用控制器的Getter和Setter方法来获取或设置数据。Getter方法用于从控制器中获取数据并显示在页面上,而Setter方法则用于将用户输入的数据传回控制器。这样,页面和控制器之间就形成了一个双向的数据流。 当用户点击页面上的按钮或链接时,会触发控制器的操作方法。这些方法可以执行各种任务,比如保存数据、导航到其他页面等。在测试这些操作方法时,我们需要确保它们能够正确地执行,并且返回预期的结果。 在测试控制器时,除了我们之前学过的测试基础知识外,还有一些特殊的事情需要考虑。比如,我们需要确保控制器的构造函数能够正确地实例化,操作方法能够被正确调用,并且返回的结果是我们期望的。此外,我们还需要测试Getter和Setter方法,确保它们能够正确地获取和设置数据。 在本模块中,我们会通过一些示例来详细讲解这些内容,帮助大家更好地理解和掌握如何测试Salesforce中的控制器。希望这些内容对大家有所帮助,让我们一起加油,成为Salesforce的高手吧!

    查看详情
  • 6

    Understanding the Technician Status Page and Extension

    第 526 页

    今天我们来聊聊技术员状态页面和一些扩展的教学要点。这个页面你可能已经见过,但这次我们做了一些小调整,让它更符合我们的需求。 首先,当你把鼠标悬停在课程交付日期上时,你会看到表格下方出现一个字符串,这个字符串列出了课程中的所有参与者。这个功能是通过一个叫做`actionSupport`的标签来实现的,它能够在不刷新页面的情况下获取数据并显示出来。 接下来,你会注意到页面上有三个编辑按钮。虽然它们看起来都差不多,但它们的工作原理却有所不同: 1. ,第一个按钮,:它直接调用了Salesforce标准控制器的编辑方法。这是最直接的方式,点击后就会进入编辑页面。 2. ,第二个按钮,:它调用了一个自定义方法,这个方法内部再调用标准控制器的编辑方法。这种方式给了我们更多的灵活性,可以在进入编辑页面前做一些额外的操作。 3. ,第三个按钮,:它直接导航到编辑页面的URL。这种方式比较直接,适合在特定情况下使用。 在接下来的课程中,我们会更详细地探讨这些不同的方法,帮助你理解它们的使用场景和优缺点。这样,你就能在实际工作中灵活运用这些技巧了。 希望这些内容对你有帮助,如果有任何问题,随时问我哦!

    查看详情
  • 7

    Module Agenda - 527

    第 527 页

    同学们,今天我们要来聊聊Salesforce中的一个非常有趣且重要的主题——测试Visualforce控制器。这个模块的议程分为四个部分,我们会一步步来探讨。 首先,我们会,了解Visualforce控制器测试,。这部分主要是让大家明白为什么我们需要测试Visualforce控制器,以及测试能帮助我们解决哪些问题。简单来说,测试就像是给我们的代码做一次体检,确保它在各种情况下都能正常工作。 接下来,我们会,测试Visualforce控制器的构造器,。构造器是控制器中非常重要的部分,它负责初始化控制器中的变量和对象。我们会看看如何编写测试代码来确保构造器能够正确地完成它的工作。 然后,我们会,测试行动方法,。行动方法是用户与Visualforce页面交互时调用的方法,比如点击按钮后执行的操作。我们会学习如何模拟这些用户操作,并验证行动方法是否按预期执行。 最后,我们会,测试Getters、Setters和属性,。这些是控制器中用于获取和设置数据的方法和属性。我们会确保这些方法和属性能够正确地处理数据,保证数据的准确性和一致性。 好了,这就是我们今天要学习的内容。希望大家能够跟上节奏,如果有任何问题,随时提问。我们开始吧!

    查看详情
  • 8

    Testing the Constructor

    第 528 页

    让我们来聊聊如何测试构建者,也就是我们常说的控制器扩展。首先,你需要明白,测试构建者的工作就是确保它所做的每一件事都能按预期运行。这听起来可能有点抽象,但别担心,我会慢慢解释。 在我们的例子中,这个构建者是一个控制器扩展。这意味着它必须能够实例化标准控制器。简单来说,就是它需要能够创建一个标准控制器的实例,这样才能正常工作。 现在,你可能看到接下来的几张幻灯片展示了几种不同的测试技术。但请注意,并不是所有这些技术在我们的例子中都是必要的。为什么呢?因为我们的控制器扩展并没有使用到每一个被测试的元素。不过,这些技术都是测试Visualforce控制器时非常常见的方法,所以了解它们还是很有帮助的。 总结一下,测试构建者就是要确保它能正确地实例化标准控制器,并且按预期工作。虽然并不是所有的测试技术都适用于我们的例子,但了解这些技术对于测试Visualforce控制器是非常有用的。希望这能帮助你更好地理解如何测试构建者!

    查看详情
  • 9

    Testing Controller Constructors: Setting currentPage()

    第 529 页

    让我们来聊聊如何在Salesforce中测试控制器的构造器,特别是如何设置和测试`currentPage()`。这个过程其实挺有意思的,就像你在搭建一个小舞台,然后看看演员(也就是你的代码)在上面怎么表演。 首先,想象一下,你有一个控制器类,叫做`MyController`。这个类有一个构造器,它的任务是在对象创建的时候,获取当前的Visualforce页面,并把它保存起来。这个页面信息是通过`ApexPages.currentPage()`这个方法获取的。 现在,我们要测试这个构造器,确保它真的能正确地获取并保存页面信息。为了做到这一点,我们需要模拟一个Visualforce页面,这样`ApexPages.currentPage()`就能返回我们设定的页面,而不是真的去访问一个页面。 这里是怎么做的: 1. ,创建测试页面引用,:首先,我们创建一个`PageReference`对象,指向我们想要测试的页面,比如`Page.MyPage`。这就像是在说,“嘿,假设我们现在就在这个页面上”。 2. ,设置当前页面,:然后,我们使用`Test.setCurrentPage()`方法,把我们刚才创建的页面引用设置为当前的页面。这就像是把我们的模拟页面放到舞台上,让`ApexPages.currentPage()`能够看到它。 3. ,实例化控制器,:接下来,我们创建`MyController`的一个实例。当这个实例被创建时,它的构造器会自动运行,尝试获取当前的页面,并保存它。 4. ,验证结果,:最后,我们需要检查一下,看看构造器是否真的把页面信息保存下来了。这通常涉及到检查控制器的某个属性,确保它和我们设置的模拟页面匹配。 通过这样的步骤,我们就可以确保我们的控制器构造器在不同的情况下都能正确地工作。这不仅帮助我们理解代码的行为,也确保我们的应用在各种情况下都能稳定运行。 希望这个解释能帮助你更好地理解如何在Salesforce中测试控制器的构造器。如果有任何疑问,随时问我哦!

    查看详情
  • 10

    Testing Controller Constructors: Setting Page Parameters

    第 530 页

    同学们,今天我们来聊聊如何在Salesforce中测试控制器的构造器。这个构造器的作用是设置页面参数,并且填充HTTP查询字符串参数,这样控制器就能找到这些参数了。 首先,我们需要创建一个测试账户。这个账户会用来模拟真实的数据。创建好之后,我们会用到这个账户的Id。这个Id会被填充到测试页面的Id参数中。这样做的好处是,我们可以确保控制器在测试时使用的是真实的数据,而不是凭空想象的数据。 接下来,构造器会做一件很重要的事情:它会将当前的Id参数存储为一个变量,我们这里叫它curId。这个curId会在稍后的测试过程中被使用。这样做的目的是为了确保在测试的不同阶段,我们都能访问到这个Id,而不会丢失或者混淆。 简单来说,这个过程就是:创建测试数据 -> 填充到页面参数 -> 存储为变量以备后用。这样,我们的控制器就能在测试中准确地找到并使用这些参数了。 希望这个解释对你们有帮助,如果还有疑问,随时提问哦!

    查看详情
  • 11

    Testing Controller Extensions: Mocking the Controller

    第 531 页

    同学们,今天我们来聊聊如何在Salesforce中测试控制器扩展。首先,我们要明白,控制器扩展通常会依赖于它所扩展的控制器的一些方法或数据。这就意味着,在测试控制器扩展时,我们需要“嘲笑”或模拟这些控制器,以确保我们的测试能够顺利进行。 想象一下,你有一个控制器扩展,它需要从一个标准的控制器中获取一些数据。为了测试这个扩展,我们不能直接使用真实的控制器,因为那样可能会引入不必要的外部依赖,导致测试结果不可预测。所以,我们需要创建一个“假”的控制器,也就是我们说的“嘲笑”控制器。 接下来,我们来看一个简单的例子。假设我们有一个名为`MyControllerExt`的控制器扩展,它依赖于一个标准的`ApexPages.StandardController`。在测试代码中,我们首先创建一个测试用的`Account`对象,并填充一些测试数据。然后,我们实例化一个`ApexPages.StandardController`,并将这个测试用的`Account`对象传递给它。 ```apex Account testAccount = new Account(); // 填充测试数据 ApexPages.StandardController stdCtrl = new ApexPages.StandardController(testAccount); MyControllerExt testExt = new MyControllerExt(stdCtrl); ``` 在这个例子中,`stdCtrl`就是我们“嘲笑”的控制器。我们将它传递给`MyControllerExt`,这样在测试过程中,`MyControllerExt`就可以使用这个模拟的控制器来获取数据或调用方法,而不会影响到真实的控制器。 最后,我们可以调用`MyControllerExt`中的setter、action和getter方法,来验证它们的行为是否符合预期。这样,我们就能够在不依赖真实控制器的情况下,全面测试我们的控制器扩展了。 希望这个解释能帮助大家更好地理解如何在Salesforce中测试控制器扩展。如果有任何问题,欢迎随时提问!

    查看详情
  • 12

    20-1: Write the Test Methods for the Constructor

    第 532 页

    同学们,今天我们要学习如何为Salesforce中的“技术员状态”页面编写测试方法。这个页面的控制器有一个扩展版本,我们需要确保这个扩展的构造函数能够被成功调用。我们将分几个步骤来完成这个任务。 首先,我们需要上传两个文件:一个是控制器的代码,另一个是页面的标记代码。这两个文件是页面的核心,控制着页面的行为和显示。 接下来,我们要创建一个单元测试方法。这个方法的目的是测试扩展的构造函数。我们需要确保当页面加载时,构造函数能够正确地初始化所有必要的变量和对象。 创建测试方法后,我们需要运行这个测试,看看它是否能够正确地验证构造函数的调用。如果测试通过,那么我们就可以确信我们的扩展构造函数是有效的。 最后,我们要回顾一下整个过程,确保我们的测试方法覆盖了所有重要的逻辑,并且能够准确地反映出页面的行为。 这个过程大约需要20分钟。现在,轮到你们动手实践了。记住,编写测试方法是一个非常重要的技能,它可以帮助我们确保代码的质量和稳定性。加油!

    查看详情
  • 13

    Module Agenda - 533

    第 533 页

    同学们,今天我们来聊聊Salesforce中的Visualforce控制器测试。这个模块的内容非常重要,因为它能帮助我们确保我们的Visualforce页面和控制器能够正常工作。 首先,我们要了解什么是Visualforce控制器测试。简单来说,就是写一些代码来检查我们的控制器是否按预期工作。这包括测试控制器的构造器、行动方法以及Getters和Setters。 接下来,我们会详细讲解如何测试控制器的构造器。构造器是控制器初始化时调用的方法,我们需要确保它正确地设置了所有必要的变量和对象。 然后,我们会讨论如何测试行动方法。这些方法是用户与页面交互时调用的,比如点击按钮或提交表单。我们需要确保这些方法能够正确处理输入并返回正确的结果。 最后,我们会学习如何测试Getters和Setters以及属性。这些是控制器中用于获取和设置数据的方法,我们需要确保它们能够正确地读取和写入数据。 通过这些测试,我们可以大大提高我们的Visualforce页面的质量和可靠性。希望大家能够认真听讲,并在课后进行实践。如果有任何问题,随时提问。我们开始吧!

    查看详情
  • 14

    Testing Action Methods

    第 534 页

    同学们,今天我们来聊聊如何在Salesforce中测试控制器扩展中的动作方法。这个听起来可能有点技术性,但其实很简单,我会用最通俗的语言来解释。 首先,什么是控制器扩展呢?简单来说,控制器扩展就是在Salesforce的标准控制器基础上,添加一些自定义的功能。比如,你可能想要在点击一个按钮时,执行一些特定的操作,这时候就需要用到控制器扩展。 那么,如何测试这些动作方法呢?我们可以通过编写测试类来实现。测试类的主要目的是确保我们的代码在各种情况下都能正常工作。 假设我们有一个控制器扩展,里面有一个方法叫做“saveRecord”,这个方法的作用是保存一条记录。我们需要测试这个方法是否真的能保存记录。 首先,我们创建一个测试类。在这个测试类中,我们会模拟一些数据,然后调用“saveRecord”方法。之后,我们会检查记录是否真的被保存了。 举个例子,假设我们有一个自定义对象叫做“CustomObject__c”,我们想要测试“saveRecord”方法是否能保存这个对象的记录。我们可以在测试类中创建一个“CustomObject__c”的实例,然后调用“saveRecord”方法。最后,我们使用SOQL查询来检查这条记录是否真的存在于数据库中。 如果记录存在,那么我们的测试就通过了;如果不存在,那么我们就需要检查代码中哪里出了问题。 总结一下,测试控制器扩展中的动作方法,其实就是模拟数据,调用方法,然后验证结果。这个过程虽然听起来有点复杂,但只要你理解了基本的逻辑,就会发现其实并不难。 好了,今天的课程就到这里。希望你们对如何测试控制器扩展中的动作方法有了更清晰的理解。如果有任何问题,随时问我哦!

    查看详情
  • 15

    Components of an Action Method

    第 535 页

    今天我们来聊聊Salesforce中的行动方法。行动方法主要分为两种类型:导航型和逻辑型。导航型的行动方法,顾名思义,就是用来在系统中导航的,比如从一个页面跳转到另一个页面。而逻辑型的行动方法则涉及到一些计算、条件判断或者触发某些业务逻辑。 当我们使用这些行动方法时,测试是非常重要的。特别是对于逻辑型的行动方法,我们需要在测试导航功能之前,先单独测试这些逻辑是否正确执行。这是因为如果逻辑部分有问题,那么即使导航功能正常,整个流程也可能无法达到预期的效果。 所以,记得在测试时,先确保逻辑部分没有问题,再测试导航部分。这样可以避免很多不必要的麻烦,也能确保我们的系统更加稳定和可靠。希望这个小技巧对你们有帮助!

    查看详情
  • 16

    Testing an Action Method

    第 536 页

    让我们来聊聊如何在Salesforce中测试一个Action Method,也就是我们常说的操作方法。这个操作通常是在Visualforce页面上,比如你点击一个“保存”按钮时触发的。 首先,我们需要理解的是,当我们点击页面上的按钮时,比如“保存”按钮,它会调用一个后台的Apex方法。这个方法会执行一些操作,比如保存数据到数据库中。为了确保这个方法按预期工作,我们需要写一些测试代码来模拟这个点击操作,并验证结果。 现在,我们来看一下你提供的测试代码: 1. 首先,我们创建了一个控制器实例 `MyController testControl = new MyController();`。这个控制器通常是与Visualforce页面绑定的,它包含了页面需要的所有逻辑和数据。 2. 接下来,我们设置了控制器的属性。比如 `testControl.setName('John');` 这行代码,我们假设控制器有一个方法 `setName`,用来设置一个名字。这里我们设置名字为“John”。 3. 然后,我们调用了 `testControl.setCal(new Cal());`。这里假设 `setCal` 方法接受一个 `Cal` 类型的对象,并将其设置为控制器的属性。`Cal` 可能是我们定义的一个类,用来处理一些特定的逻辑。 4. 最后,我们调用了 `save` 方法,这个方法通常是我们点击“保存”按钮时调用的。`PageReference successPage = testCtrl.save();` 这行代码执行了保存操作,并返回一个 `PageReference` 对象。这个对象通常用来重定向用户到另一个页面,比如保存成功后的确认页面。 通过这样的测试代码,我们可以模拟用户在页面上的操作,并验证控制器的逻辑是否正确执行。如果 `save` 方法按预期工作,它应该返回一个有效的 `PageReference`,并且相关的数据应该被正确地保存到数据库中。 这就是如何通过显式调用方法来测试一个Action Method的基本流程。希望这能帮助你更好地理解Salesforce中的测试方法!

    查看详情
  • 17

    Verify Where the Action "Goes"

    第 537 页

    同学们,今天我们来聊聊验证行动中的“去哪里”教学点。这个部分其实就是在讲,我们在测试软件或者系统的时候,不仅要看它处理正确数据时表现如何,还要看它在面对错误或意外数据时,能不能妥善处理。 首先,我们来说说阳性测试。阳性测试就像是给系统一个“幸福之路”的考验。我们输入正确的数据,看看系统是不是能按照预期那样,给出我们想要的结果。比如,3B-5 B这个行为,就是阳性测试的一个例子。我们输入3B-5 B,系统应该能正确识别并处理这个数据,给出我们预期的输出。 然后,我们再来看看阴性测试。阴性测试就像是给系统一个“不愉快的路径”的考验。我们输入一些错误的数据,或者故意制造一些意外情况,看看系统能不能妥善处理这些异常。比如,6 B-7 B这个行为,就是阴性测试的一个例子。我们输入6 B-7 B,系统应该能识别出这个数据有问题,并给出相应的错误提示或者处理方式。 所以,同学们,记住哦,验证行动中的“去哪里”教学点,就是要我们既关注系统在正确数据下的表现,也要关注它在错误数据下的应对能力。这样,我们才能更全面地了解系统的性能和稳定性。

    查看详情
  • 18

    20-2: Write Unit Tests for Action Methods

    第 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中,你可以通过开发者控制台或使用命令行工具来运行测试。 ### 总结 通过以上步骤,我们为“技术员状态”页面的控制器扩展中的两个自定义操作方法编写了单元测试。这些测试方法帮助我们确保代码的正确性和可靠性。记住,编写单元测试是开发过程中非常重要的一部分,它可以帮助我们及早发现和修复问题。 希望这个讲解对你们有帮助!如果有任何问题,随时提问。

    查看详情
  • 19

    Module Agenda - 539

    第 539 页

    今天我们来聊聊Salesforce中的Visualforce控制器测试。这个模块的内容非常实用,能帮助你确保你的Visualforce页面和控制器都能正常工作。 首先,我们会了解一下什么是Visualforce控制器测试。简单来说,就是通过编写测试代码来检查你的控制器是否按预期工作。这包括检查控制器的构造器、行动方法以及Getters和Setters等属性。 接下来,我们会详细讲解如何测试Visualforce控制器的构造器。构造器是控制器初始化时调用的方法,确保它正确地设置了初始状态是非常重要的。 然后,我们会讨论如何测试行动方法。这些方法是用户与页面交互时调用的,比如点击按钮或提交表单。我们需要确保这些方法能正确地处理用户输入并返回预期的结果。 最后,我们会学习如何测试Getters、Setters和属性。这些是控制器中用于获取和设置数据的方法和属性。通过测试它们,我们可以确保数据在控制器和页面之间正确地传递。 通过这个模块的学习,你将能够编写有效的测试代码,确保你的Visualforce控制器在各种情况下都能稳定运行。这不仅有助于提高代码质量,还能减少生产环境中的错误。希望这些内容对你有所帮助!

    查看详情
  • 20

    Testing Getter and Setter Methods

    第 540 页

    今天我们来聊聊如何在Salesforce中测试Getter和Setter方法。这两个方法在Apex类中非常常见,它们帮助我们获取和设置对象字段的值。 首先,假设我们有一个Apex类,里面有一个字段叫做`field`。我们通常会为这个字段创建Getter和Setter方法。Getter方法用来获取字段的值,Setter方法用来设置字段的值。 ### 1. 设置值 假设我们有一个字符串变量`test`,我们想把这个变量的值设置到`field`字段中。我们可以这样做: ```apex obj.field = test; ``` 这里,`obj`是我们的对象实例,`field`是我们要设置的字段。通过这行代码,`test`的值就被设置到了`field`字段中。 ### 2. 获取值 接下来,我们想验证一下这个值是否真的被设置成功了。我们可以使用Getter方法来获取`field`字段的值,然后和`test`变量进行比较。 ```apex String retrievedValue = obj.field; System.assertEquals(test, retrievedValue); ``` 在这段代码中,`retrievedValue`是通过Getter方法获取的`field`字段的值。然后我们使用`System.assertEquals`方法来比较`test`和`retrievedValue`是否相等。如果相等,说明我们的Setter方法工作正常。 ### 3. 总结 - ,Setter方法,:用来设置字段的值。比如`obj.field = test;`。 - ,Getter方法,:用来获取字段的值。比如`String retrievedValue = obj.field;`。 - ,验证,:通过比较设置的值和获取的值,确保Getter和Setter方法正常工作。 通过这种方式,我们可以轻松地测试和验证我们的Getter和Setter方法是否按预期工作。希望这个解释对你有帮助!如果有任何问题,随时问我哦!

    查看详情
  • 21

    Testing Getters: A more Complex example

    第 541 页

    同学们,今天我们来聊聊如何测试Getters方法。想象一下,你有一个方法,它的任务是给你一些数据。现在,你需要确保这个方法真的能给你你想要的数据,而且数据是准确和有效的。 首先,我们来看看具体结果。这意味着你要检查方法返回的数据是否完全符合你的预期。比如,如果你期望得到一个包含三个元素的列表,那么你就需要确认返回的列表确实有三个元素。 接下来,是包含特定值的结果。这里,你要检查返回的数据中是否包含了你需要的特定值。比如说,如果你需要列表中包含某个特定的名字,那么你就要确认这个名字确实在返回的列表中。 最后,我们要检查的是有效结果。这很简单,就是确保返回的数据不是空的。如果方法返回了一个空值,那显然这不是我们想要的结果。 记住,测试Getters方法的目的,是为了确保你的代码能够稳定、可靠地返回你需要的数据。这样,当你在构建更复杂的系统时,你可以信赖这些基础的方法,它们会像坚固的基石一样,支撑起你的整个应用。 好了,这就是今天的内容。希望你们能理解并记住这些要点,下次我们再见!

    查看详情
  • 22

    Testing Properties

    第 542 页

    今天我们来聊聊在Salesforce中处理Visualforce页面时,关于属性绑定和getter方法的一些小技巧。听起来有点复杂,但其实很简单,我会用简单的语言来解释。 首先,当你在Visualforce页面上工作时,你可能会想要显示一些来自Apex控制器的数据。这时候,你通常会使用一个叫做“值绑定”的技术。简单来说,就是告诉Visualforce页面:“嘿,去Apex控制器里找这个数据,然后显示出来。” 在Visualforce页面上,你只需要写属性的名字,不需要写“get”这个词。比如,如果你的Apex控制器里有一个方法叫做`getUserName()`,那么在Visualforce页面上,你只需要写`{!userName}`,Visualforce就会自动调用`getUserName()`方法来获取数据。 但是,当你在Apex代码里,比如在测试类中,想要调用这个getter方法时,情况就有点不同了。你不能像在Visualforce页面上那样只写属性名,你必须完整地调用这个方法,包括“get”这个词。所以,在测试类中,你会写`controller.getUserName()`来获取数据。 总结一下,Visualforce页面上的值绑定是简化的,你只需要写属性名,而在Apex代码中,你需要完整地调用getter方法。这个小细节很重要,因为它确保了你的代码在不同的上下文中都能正确工作。 希望这个解释能帮助你更好地理解在Salesforce中如何处理属性和getter方法。如果有任何问题,随时问我哦!

    查看详情
  • 23

    20-3: Write Unit Tests for Getters and Setters

    第 543 页

    让我们一起来完成这个任务。首先,我们需要理解什么是Getter和Setter。在Salesforce中,Getter方法用于获取一个变量的值,而Setter方法用于设置一个变量的值。在这个任务中,我们主要关注的是测试一个名为`getAttendeeList`的Getter方法。 ### 第一步:理解控制器扩展代码 假设我们有一个控制器扩展,它管理“技术员状态”页面的逻辑。在这个控制器扩展中,有一个方法叫做`getAttendeeList`,它返回一个包含“Attendees:”字符串的列表。 ### 第二步:创建单元测试方法 我们需要创建一个单元测试方法来测试`getAttendeeList`方法。单元测试的目的是确保我们的代码按预期工作。我们可以使用Salesforce的Apex测试框架来编写这个测试。 ```apex @isTest private class TechnicianStatusControllerTest { @isTest static void testGetAttendeeList() { // 创建控制器扩展的实例 TechnicianStatusController controller = new TechnicianStatusController(); // 调用getAttendeeList方法 List attendeeList = controller.getAttendeeList(); // 断言返回的列表包含“Attendees:” System.assert(attendeeList.contains('Attendees:'), 'The attendee list should contain "Attendees:"'); } } ``` ### 第三步:测试新的单元测试逻辑 现在,我们需要运行这个测试来确保它按预期工作。在Salesforce中,你可以通过开发者控制台或Salesforce CLI来运行测试。 1. 打开开发者控制台。 2. 选择“测试”菜单,然后选择“新建运行”。 3. 选择你刚刚创建的测试类`TechnicianStatusControllerTest`。 4. 点击“运行”按钮。 ### 第四步:检查测试结果 测试运行完成后,你应该能够看到测试结果。如果测试通过,那么恭喜你,你的`getAttendeeList`方法按预期工作。如果测试失败,你需要检查你的代码,看看哪里出了问题。 ### 总结 通过这个任务,我们学习了如何编写和测试一个Getter方法。我们创建了一个单元测试方法来确保`getAttendeeList`方法返回包含“Attendees:”字符串的列表。然后我们运行了这个测试,并检查了结果。这个过程帮助我们确保我们的代码是可靠和正确的。 希望这个解释对你有帮助!如果你有任何问题,随时问我。

    查看详情
  • 24

    Key Takeaways - 544

    第 544 页

    让我们来聊聊Visualforce控制器的测试。首先,你得知道,就像Apex触发器和类一样,Visualforce控制器也需要满足代码覆盖的要求。这意味着你需要编写足够的测试代码来确保你的控制器逻辑被充分测试。 当你测试Visualforce控制器时,你需要模拟用户和视图的行为。这就像是你在扮演一个用户,点击按钮、输入数据,看看控制器会怎么反应。这样做的目的是确保控制器在实际使用中能够正常工作。 Visualforce控制器的测试主要分为几个类别: 1. ,构造函数,:这是控制器被创建时首先调用的部分。你需要测试构造函数是否正确初始化了所有必要的变量和对象。 2. ,动作方法,:这些是用户与页面交互时调用的方法,比如点击按钮。你需要测试这些方法是否按预期执行,比如是否正确地更新了数据或导航到了正确的页面。 3. ,接球手和接球手(Getter和Setter),:这些方法用于获取和设置控制器的属性。你需要测试这些方法是否正确地返回和设置值。 4. ,属性,:这些是控制器中定义的变量,用于存储数据。你需要测试这些属性是否被正确地初始化和使用。 通过这些测试,你可以确保你的Visualforce控制器在各种情况下都能稳定运行,为用户提供流畅的体验。记住,好的测试不仅能发现错误,还能帮助你理解代码的工作原理。所以,花时间好好测试你的控制器吧!

    查看详情