我想部署一个包含apex类,测试类和调用apex类的进程构建器的包。在我开发类的沙箱上,代码覆盖率为100%。当我尝试将其部署到另一个沙盒/生产时,它失败了,因为它显示代码覆盖率为65%。
我认为问题是因为流程构建器在部署时处于非活动状态,因此不会覆盖整个代码。我该如何处理?
我已经尝试过以下操作:
我的代码接收客户电子邮件并使用CryptoUtil.generateHashDigest方法将其转换为哈希值,然后将其保存在哈希电子邮件字段中。
Public static void newRecord(List<Account> listAccounts) {
for(Account a : listAccounts) {
Account updacc=[select id from account where id = :a.id];
String message = String.valueof(a.get('Customer_Email__pc'));
String hashDigest = CryptoUtil.generateHashDigest(message);
updacc.Hashed_email__pc = HashDigest;
update updacc;
}
}
我必须创建插入/更新的帐户记录的克隆才能使用流程构建器。使用此方法,仅在克隆中进行更改。如果未使用process builder,则测试类将获取Null值,而不是Hashed_email__pc字段中的实际哈希值,这会导致测试失败。使用进程构建器时,克隆中所做的更改将反映在实际记录中,并且测试将通过。即使我没有调用此部分代码的测试方法,测试也会在流程构建器覆盖它时通过。
我无法找到一种创建测试类的方法,其中在停用流程构建器时返回正确的值。我必须使用DML来插入记录,以便可以克隆它。
在这种情况下,我应该如何测试顶点类?
答案 0 :(得分:1)
我注视了这一点,但这应该让你前进
public static void newRecord(List<Account> listAccounts)
{
List<Account> accountsToUpdate = new List<Account>();
for(Account a : listAccounts)
{
String message;
String hashDigest;
Account account = new Account();
if(a.Customer_Email__pc != null)
{
message = String.valueof(a.get('Customer_Email__pc'));
hashDigest = CryptoUtil.generateHashDigest(message);
account.Hashed_email__pc = HashDigest;
account.ID = a.ID;
accountsToUpdate.add(account);
}
}
if(!accountsToUpdate.isEmpty())
{
update accountsToUpdate;
}
}
@isTest
private class Test_Account
{
// -------- Variables --------
private static List<Account> testAccount;
// -------- Shared Methods --------
// Initialization of test data example
private static void init(Integer testType)
{
testAccount = new List<Account>();
if(testType == 1)
{
for(Integer i = 0; i < 10; i++)
{
Account a = new Account();
//build your accounts..
testAccount.add(a);
}
insert testAccount;
}
}
// -------- Test Methods --------
private static testMethod void testAccountHash()
{
init(1);
Test.startTest();
//Because this is an actual public method, I would just test the method
newRecord(testAccount);
Test.stopTest();
List<Account> accountResult = [SELECT .... FROM Account];
//Assert
System.assertNotEquals(...)
}
}
答案 1 :(得分:0)
我们已经看到部署非活动PB的问题。确保PB的部署失败不是因为沙盒的版本比生产版本更新 - 我们在新发布的预览窗口期间遇到了这个问题,当时我们的沙箱经常出现在即将发布的版本中但是prod不是。
我们已经开始编写测试类来覆盖我们的流程构建器。您应该能够编写测试来测试通过PB处理的预期系统行为。示例:在记录更新时,您的类会更新各种内容,并且您的PB会更新各种其他内容并发送电子邮件警报。您的测试类可以扩展到涵盖PB所做的更新,并检查它是否在预期时发送电子邮件。
希望这有帮助。
答案 2 :(得分:0)
您是否想要将PB推向非活动状态?或者它在你的包装中是否有效? 您使用Eclipce / Migration工具还是更改设置来推送代码? 如果PB在您的包中处于活动状态,那么它可能是Scott提到的组织版本问题。 解决方法是在测试类中直接测试您的类,而不依赖于PB。您可以对对象记录执行CRUD并在测试类中模拟PB逻辑以完全测试代码。