I am unit testing my login procedures for a Xamarin Forms application and need to test the App.CurrentUser and App.AllUsers methods but I can’t determine how to mock a User object. Does MongoDB have any documentation or examples for unit testing a User in C#?
Seriously - 5 days and no one from Mongo has any advice?
Hey Raymond, unfortunately, the app/user interaction is not very mock friendly. There are some internal API to get a fake user which may get you what you need, but you’ll need to access those via reflection:
private static User GetUser(App app, string id)
{
var handleField = typeof(App).GetField("Handle", BindingFlags.Instance | BindingFlags.NonPublic);
var handle = handleField.GetValue(app);
var getUserForTesting = handle.GetType().GetMethod("GetUserForTesting");
// Need to be JWTs, but the contents don't matter
var refreshToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoicmVmcmVzaCB0b2tlbiIsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoyNTM2MjM5MDIyfQ.SWH98a-UYBEoJ7DLxpP7mdibleQFeCbGt4i3CrsyT2M";
var accessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiYWNjZXNzIHRva2VuIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjI1MzYyMzkwMjJ9.bgnlxP_mGztBZsImn7HaF-6lDevFDn2U_K7D8WUC2GQ";
var userHandle = getUserForTesting.Invoke(handle, new object[] { id, refreshToken, accessToken });
return (User)Activator.CreateInstance(typeof(User), BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { userHandle, app }, null);
}
That’s obviously fairly ugly, but should hopefully unblock you. We do plan to make this entire thing easier to mock and test, but since most of the functionality is implemented in C++, it’s a little bit complicated to come up with a good design. That being said, we’d appreciate your feedback on what exactly you’re looking to test there and what would the ideal SDK API look like to enable that.
Thanks Nikola, that code did the trick.
I have a Xamarin forms app that logs in the user then passes a Realms.Sync.User to the next page which is then sued to access the data from Realm. I needed a valid mock User object for unit testing and UI tests.
This topic was automatically closed 5 days after the last reply. New replies are no longer allowed.