如何在未运行测试的情况下为代码块创建测试方案

时间:2019-04-26 22:13:26

标签: salesforce salesforce-service-cloud

我正在尝试测试仅在条件为[If(!test.isRunning())为真时运行的代码段,

如果我使某个测试用例运行此代码,则由于条件为false,因此不会在if块内出现。

if(!Test.isRunningTest()){
//do something
}

1 个答案:

答案 0 :(得分:0)

您无法测试该代码。这就是!Test.isRunningTest()的明确意图。受此条件保护的代码将永远不会在Apex单元测试上下文中运行。

因此,此结构在Apex代码中很少使用,并且仅应用于绝对不能在单元测试中执行的代码元素。一个示例是addFields()调用,有时在Visualforce控制器的构造函数中使用,在测试上下文中是不允许的。

很少有人看到这种方式保护着多行代码,这让我怀疑代码的架构不好。在仅保护一行代码的情况下,您仍然可以通过在一行上编写if及其主体来使代码覆盖率达到100%:

if (!Test.isRunningTest()) controller.addFields(new List<String> { 'Name' });

只要在测试中运行if测试,整个行都被视为覆盖。

使用此模式阻止标注通常很常见。在现代代码中,应改用Mocks。