Uses for static generic classes?

前端 未结 9 1723
猫巷女王i
猫巷女王i 2020-12-08 10:11

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.

         


        
9条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-08 11:02

    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);
    

提交回复
热议问题