我正在尝试测试仅在条件为[If(!test.isRunning())为真时运行的代码段,
如果我使某个测试用例运行此代码,则由于条件为false,因此不会在if块内出现。
if(!Test.isRunningTest()){
//do something
}
答案 0 :(得分:0)
您无法测试该代码。这就是!Test.isRunningTest()
的明确意图。受此条件保护的代码将永远不会在Apex单元测试上下文中运行。
因此,此结构在Apex代码中很少使用,并且仅应用于绝对不能在单元测试中执行的代码元素。一个示例是addFields()
调用,有时在Visualforce控制器的构造函数中使用,在测试上下文中是不允许的。
很少有人看到这种方式保护着多行代码,这让我怀疑代码的架构不好。在仅保护一行代码的情况下,您仍然可以通过在一行上编写if
及其主体来使代码覆盖率达到100%:
if (!Test.isRunningTest()) controller.addFields(new List<String> { 'Name' });
只要在测试中运行if
测试,整个行都被视为覆盖。
使用此模式阻止标注通常很常见。在现代代码中,应改用Mocks。