Salesforce 开发笔记

测试代码对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%,通过。

上一篇下一篇

猜你喜欢

热点阅读