测试代码对Owner不可见
2019-02-25 本文已影响13人
到处舒卷意何长
前几天遇到了一个小问题。大概是写了针对Owner是某个特定用户的数据做出一些修改的逻辑,写得很顺利,然而在测试的时候一直遇到查不出来测试数据的问题。
新增代码:
trigger ProcessTask on Task (after insert)
{
Set<Id> relatedCaseIds = new Set<Id>();
for(Task newTask : Trigger.new)
{
relatedCaseIds.add(newTask.WhatId);
}
String specialUserName = 'My Name';
List<Case> matchedCases = [select Id, OwnerId, Owner.Name, First_Response__c,
(select Id, CreatedDate from Tasks order by CreatedDate limit 1) from Case
where Owner.Name = :specialUserName and First_Response__c = null and Id in :relatedCaseIds];
List<Case> updateCases = new List<Case>();
for(Case caseInfo : matchedCases)
{
// Do something
}
}
测试代码:
@isTest
public class ProcessTaskTest
{
@isTest
static void testBasic()
{
String specialUserName = 'My Name';
User specialUser = [select Id, Name
from User where Name = :specialUserName limit 1];
System.debug(specialUser);
Test.startTest();
System.runAs(specialUser)
{
Case testCase = new Case();
testCase.OwnerId = specialUser.Id;
insert testCase;
Task testTask = new Task();
testTask.WhatId = testCase.Id;
insert testTask;
}
Test.stopTest();
}
}
按理来说应该是没有问题的,但是跑测试代码的时候,发现matchedCases
这里的查询一直查不到数据,去掉Name的限制倒是能查出来这条数据,不过Owner的名字是NULL。
这是十分让人费解的,难道是连接字段的字段和某些formula字段一样反应慢一拍?但是matchedCases
是重新查询出来的数据,按理说不至于,再仔细查看了一些文档,原来问题的根源在于,salesforce让测试里对Owner字段不可见。非常简便的解决这个问题的办法是加上(seeAllData=true)
,再次尝试跑测试代码,100%,通过。