2017-04-22 84 views
1

我需要一些幫助嘲諷和測試我的課。我嘗試了各種方法,並覺得這是我最接近的方法。 // 1和// 2是兩次單獨的嘗試。 方法一沒有錯誤,但我不知道如何使用Assert調用實際測試任何東西。 嘗試2有錯誤消息嘲諷和單元測試ASP.Net 1.0庫

無法實例化類的代理:RentalsRated.Data.RentalsDBContext。

測試

[Fact] 
public void RepoUA_GetAll() 
{ 
    var users = new List<UserAccount> { 
     new UserAccount { Id = "idstring1", Username = "username1"}, 
     new UserAccount { Id = "idstring2", Username = "username2" }, 
     new UserAccount { Id = "idstring3", Username = "username3" }, 
    }.AsQueryable(); 

    var mockContext = new Mock<RentalsDBContext>(); 
    var mockSet = new Mock<DbSet<UserAccount>>(); 

    mockSet.As<IQueryable<UserAccount>>().Setup(m => m.Provider).Returns(users.Provider); 
    mockSet.As<IQueryable<UserAccount>>().Setup(m => m.Expression).Returns(users.Expression); 
    mockSet.As<IQueryable<UserAccount>>().Setup(m => m.ElementType).Returns(users.ElementType); 
    mockSet.As<IQueryable<UserAccount>>().Setup(m => m.GetEnumerator()).Returns(users.GetEnumerator()); 

    mockContext.Setup(m => m.Set<UserAccount>()).Returns(mockSet.Object).Verifiable(); 

    //1 
    Mock<IRentalsRepository<UserAccount>> MockRepo = new Mock<IRentalsRepository<UserAccount>>(); 
    MockRepo.Setup(m => m.GetAll()).Returns(users); 

    //2 
    var testClass = new RentalsRepository<UserAccount>(mockContext.Object); 
    var result = testClass.Get("idstring2"); 

    Assert.Equal("idstring2", result.Id); 
} 

回購

public class RentalsRepository<T> : IRentalsRepository<T> where T : BaseClass 
{ 
    private readonly RentalsDBContext _Context; 
    private DbSet<T> entities; 
    string errorMessage = string.Empty; 

    public RentalsRepository(RentalsDBContext _Context) 
    { 
     this._Context = _Context; 
     entities = _Context.Set<T>(); 
    } 

    public IEnumerable<T> GetAll() 
    { 
     return entities.AsEnumerable(); 
    } 
} 

語境

public class RentalsDBContext : DbContext 
{ 

    public RentalsDBContext(DbContextOptions<RentalsDBContext> options) : base(options) 
    { 
    } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 

    } 

    public virtual DbSet<UserAccount> UserAccounts { get; set; } 
    public virtual DbSet<Rating> Ratings { get; set; } 
    public virtual DbSet<PropertyAddress> PropertyAddresses { get; set; } 
    public virtual DbSet<Town> Towns { get; set; } 
    public virtual DbSet<County> Countys { get; set; } 
    public virtual DbSet<RatingImage> RatingImages { get; set; } 
} 

回答

1

您將成爲RentalsDBContext的默認構造函數,因爲Moq無法使用其當前構造函數實例化類。

public class RentalsDBContext : DbContext { 

    public RentalsDBContext() : base() { } 

    public RentalsDBContext(DbContextOptions<RentalsDBContext> options) : base(options) 
    { 
    } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 

    } 

    //...other code removed for brevity 
}