【问题标题】:Trouble in testing with invalid field使用无效字段进行测试时遇到问题
【发布时间】:2023-01-14 02:31:59
【问题描述】:

公共共享类 SobjectByParams { public SObject createSObject(String sObjectName, Map<String, String> fields) {

    String invalidSObjectError = System.Label.invalid_Sobject_Name;
    String invalidFieldError = System.Label.Invalid_Sobject_Field;

    SObject newObject;
    try {
        newObject = (SObject) Type.forName(sObjectName).newInstance();
    } catch (NullPointerException ex) {
        throw new InvalidTypeNameException(invalidSObjectError);
    }

    for (String field : fields.keySet()) {
        try {
            newObject.put(field, fields.get(field));
        } catch (SObjectException ex) {
            throw new InvalidTypeNameException(invalidFieldError);
        }
    }

    insert newObject;
    return newObject;
}

public class InvalidTypeNameException extends Exception {
}

}

@IsTest 公共共享类 SobjectByParamsTest {

SobjectByParams sobjectByParams;

private static final String TestName = 'TestName';
private static final String BCity = 'Lviv';
private static final String LastName = 'Kapo';
private static final String Email = 'pavlofff33@gmail.com';

@IsTest
static void createSObject() {
    SobjectByParams sobjectByParams = new SobjectByParams();
    Map<String, String> fields = new Map<String, String>();
    fields.put('BillingCity', BCity);
    Test.startTest();
    SObject result = sobjectByParams.createSObject(TestName, fields);
    Test.stopTest();
    System.assertEquals(BCity, result.get(BCity));
}

}

SobjectByParams.InvalidTypeNameException:invalidSobjectNameError - 问题

测试工作在 53.33% 但我需要至少 80%

我不知道如何解决我的问题

【问题讨论】:

    标签: testing salesforce apex


    【解决方案1】:

    TestName 不应该是像 Contact 这样的 sObject 名称吗?当您正常运行这段代码时,它是否有效,它是否插入任何东西或抛出?检查/修复它,然后您可能也需要进行阴性测试。

    做第二个测试方法

    @isTest
    static void testPassingBadData() {
        SobjectByParams sobjectByParams = new SobjectByParams();
        Map<String, String> fields = new Map<String, String>();
        fields.put('BillingCity', BCity);
        try{
            sobjectByParams.createSObject('NoSuchObjectInTheSystem', fields);
            System.assert(false, 'This should have failed and thrown exception');
        } catch(Exception e){
            System.assert(e.getMessage().contains(Label.Invalid_Sobject_Field));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-06-28
      • 2022-07-15
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多