显然,Salesforce.com中Apex的Spring '12/v24.0版本的新功能是单元测试不再能够访问"真实"数据 - 因此(如果我正确理解了更改)SOQL查询将会现在只检索在单元测试过程中插入的对象 - 甚至是受到一些限制的.
无论如何,这似乎将OpportunityLineItem测试抛出窗口,因为:
我真的希望我至少得到这四点中的一个错误,但到目前为止,我现有的单元测试没有任何变化表明它们中的任何一个都是错的.这当然意味着我的单元测试不再有效.这件事发生在一夜之间 - 周五我的沙盒中的测试运行良好,现在他们失败了.
我错过了什么,或者这是新SFDC版本中的错误?
如果我深陷在一个循环的巢中,我想知道哪些更有效:
if (!isset($array[$key])) $array[$key] = $val;
Run Code Online (Sandbox Code Playgroud)
要么
$array[$key] = $val;
Run Code Online (Sandbox Code Playgroud)
就可读代码而言,第二种形式更为可取.实际上,名称更长,数组是多维的.因此,第一个表单最终在我的程序中看起来非常粗糙.
但我想知道第二种形式是否会变慢.由于代码是程序中最常执行的函数之一,我想使用更快的形式.
一般来说,此代码将使用相同的"$ key"值执行多次.所以在大多数情况下,$ array [$ key]已经设置好了,而isset()将返回FALSE.
为了澄清那些担心我将不相同的代码视为相同的人:就程序的这一部分而言,$ val是一个常数.直到运行时才知道它,但它在程序的早期设置,并且在此处不会更改.因此两种形式都会产生相同的结果.这是获得$ val最方便的地方.
我需要从表中提取几行并以两种方式处理它们:
该表看起来大致如下:
table (
key,
string_data,
numeric_data
)
Run Code Online (Sandbox Code Playgroud)
所以我正在研究我正在写的函数的两种方法.
第一个是使用一个查询拉取聚合数据,然后在循环内再次查询每组逐行数据(以下是类似PHP的伪代码):
$rows = query(
"SELECT key,SUM(numeric_data)
FROM table
GROUP BY key"
);
foreach ($rows as $row) {
<process aggregate data in $row>
$key = $row['key'];
$row_by_row_data = handle_individual_rows($key);
}
function handle_individual_rows($key)
{
$rows = query(
"SELECT string_data
FROM table WHERE key=?",
$key
);
<process $rows one row at a time>
return $processed_data;
}
Run Code Online (Sandbox Code Playgroud)
或者,我可以做一个大的查询,并让代码完成所有工作:
$rows = query(
"SELECT key, string_data, numeric_data
FROM table"
);
foreach ($rows as $row) { …Run Code Online (Sandbox Code Playgroud)