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.