What are the key uses of a Static Generic Class in C#? When should they be used? What examples best illustrate their usage?
e.g.
I use these to mock a DbSet when testing against classes that use EntityFramework Async methods.
public static class DatabaseMockSetProvider where TEntity: class
{
public static DbSet CreateMockedDbSet(IQueryable mockData)
{
var mockSet = Mock.Create>();
Mock.Arrange(() => ((IDbAsyncEnumerable)mockSet).GetAsyncEnumerator())
.Returns(new TestDbAsyncEnumerator(mockData.GetEnumerator()));
Mock.Arrange(() => ((IQueryable)mockSet).Provider)
.Returns(new TestDbAsyncQueryProvider(mockData.Provider));
Mock.Arrange(() => ((IQueryable)mockSet).Expression).Returns(mockData.Expression);
Mock.Arrange(() => ((IQueryable)mockSet).ElementType).Returns(mockData.ElementType);
Mock.Arrange(() => ((IQueryable)mockSet).GetEnumerator()).Returns(mockData.GetEnumerator());
return mockSet;
}
}
And use them like so in my unit tests - saves a lot of time and can use them for any entity types:
var mockSet = DatabaseMockSetProvider.CreateMockedDbSet(recipes);
Mock.Arrange(() => context.RecipeEntities).ReturnsCollection(mockSet);