SalesForce 中的单元测试

Unit Testing in SalesForce

我在这里找到了类似的答案:

How to unit test works in salesforce?

这里:https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_controller_error_handling.htm

但这些似乎并没有真正回答我的特定问题。

我 "stubbed out" 一些测试 classes。我们应该从一开始就这样做,但是他们给了一组开发人员一个 SalesForce 项目,他们以前从未做过 SalesForce...然后把我们安排在时间 c运行通道。他们当时告诉我们不要担心单元测试,现在我们发现 SalesForce 需要 75% 或更高的代码覆盖率才能投入生产。

无论如何,我知道我可以在 return 无效的方法中测试状态,而且我知道我可以测试 return 类型的方法。

但我的问题是:如何测试应该通过 VisualForce 页面输入的值?我是否只创建 class 并填写信息?

我更熟悉 C# 中的单元测试,以至于我使用 Roy Osherove 的测试方法命名约定,或者至少是我的版本。

此外,我将如何测试具有查询字符串的页面?我假设我会用某种查询字符串做一个 PageReference,但一般来说,单元测试应该 运行 独立。

我主要关心的是运行动态测试(即动态记录 ID),以及如果没有记录会发生什么(即如果 dev/testing 环境被擦除)。

那么,对此有何想法?

不要参考 Apex 测试中的现有记录 classes。在测试中创建自己的测试数据class,然后在测试方法中引用。

您可以设置如下参数:

PageReference startPage = new PageReference('/apex/VisualforcePageName?id='+record.id); Test.setCurrentPage(起始页);

https://trailhead.salesforce.com/modules/apex_testing/units/apex_testing_data

您不测试 Visualforce 页面,而是测试控制器。您可以在测试中创建控制器的实例,为其提供所需的数据(参数)并直接调用控制器中的方法。

MyPageController ctrl = new MyPageController(params)
ctrl.loadData();
ctrl.saveInput();
ctrl.alertUser();

最好使用 testUtils class 为您的测试创建虚拟数据。然后只需从您的测试中调用适当的方法 class。

List<Contact> contacts = testUtils.createContacts();
insert contacts;

任何适用于插入的触发器都将被触发,您将获得代码覆盖率。等等。