首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在UTest类中初始化内存中的db上下文

如何在UTest类中初始化内存中的db上下文
EN

Stack Overflow用户
提问于 2022-03-03 13:01:28
回答 1查看 29关注 0票数 0

如何在UnitTest类中初始化假内存数据库上下文,以便使用CatDbContext测试存储库。我得到了错误: OneTimeSetUp:没有找到合适的构造函数。我需要如何初始化数据库,用于测试catRepository。

代码语言:javascript
复制
    namespace CatsCRUDAppTest
{
    public class CatRepositoryTests
    {
        private IRepository<Cat> catRepository;
        private FakeDbContext context;

        private Cat defaultCat = new Cat() {Id = 0, Name = "name" };

        // OneTimeSetUp: No suitable constructor was found
        public CatRepositoryTests(FakeDbContext fake)
        {
            catRepository = new CatRepository(fake);
            context = fake;
        }
        //

        [Test]
        public void CreateTrueTest()
        {
            Cat cat = defaultCat;
            catRepository.Create(cat);
            context.SaveChanges();

            Cat existingCat = context.Find<Cat>(cat.Id);

            Assert.IsNotNull(existingCat);
        }
    }

存储库类:该类使CatDbContext初始化。

代码语言:javascript
复制
    namespace DAL.Repositories
{
    public class CatRepository : IRepository<Cat>
    {
        private CatDbContext db;

        public CatRepository(CatDbContext context)
        {
            db = context;
        }
        public async void Create(Cat item)
        {
            await db.Cats.AddAsync(item);
        }

FakeDbContext:

代码语言:javascript
复制
public class FakeDbContext : CatDbContext
    {
        public FakeDbContext(DbContextOptions<CatDbContext> options) : base(options)
        {
        }

        public DbSet<Cat> Cats { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseInMemoryDatabase(databaseName: "FakePersonalSiteDbContext");
        }
}
EN

回答 1

Stack Overflow用户

发布于 2022-03-04 08:31:32

需要使用dbBuilder。

代码语言:javascript
复制
 private IRepository<Cat>? catRepository;
            private FakeDbContext? context;
    
        [SetUp]
        public void SetUp()
        {
            var dbBuilder = new DbContextOptionsBuilder<CatDbContext>();
            dbBuilder.UseInMemoryDatabase(databaseName: "FakeDbContext");
            context = new (dbBuilder.Options);
            catRepository = new CatRepository(context);
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71337646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档