We need to use
database.insertImmediate()
. It returnsList<Database.SaveResult>
.Now, we want to mock the
database.insertImmediate()
and not do the dml call and need to be able mock theDatabase.saveResult
as well. Is there any native way to mock it, or should I define an Interface or class that can work withDatabase.SaveResult
?
Answer
You can create “fake” system objects, but, of course, be wary of doing so in a way that will break their internal implementation.
Here’s an example of a successful save:
Database.SaveResult sr = (Database.SaveResult)
JSON.deserialize('{"success":true,"id":"0013000000abcde"}', Database.SaveResult.class);
And a failed save:
Database.SaveResult sr = (Database.SaveResult)
JSON.deserialize('{"success":false,"errors":[{"message":"You cannot do this...","statusCode":"FIELD_CUSTOM_VALIDATION_EXCEPTION"}]}', Database.SaveResult.class);
You’ll need to figure out a way to inject the values into whatever you’re testing, but without seeing your code, it’s hard to tell exactly how you might do that in your specific case.
Attribution
Source : Link , Question Author : Jorjani , Answer Author : sfdcfox