欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

對Entity?Framework?Core進行單元測試

 更新時間:2022年03月24日 11:36:51   作者:.NET開發(fā)菜鳥  
這篇文章介紹了對Entity?Framework?Core進行單元測試的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、引言

我們先來講解如何對EntityFrameworkCore進行單元測試,這里我們使用內(nèi)存數(shù)據(jù)庫進行測試。使用內(nèi)存數(shù)據(jù)庫需要安裝Microsoft.EntityFrameworkCore.InMemory這個包。

二、創(chuàng)建測試項目

我們還是以上面文章中創(chuàng)建的項目為例,在解決方案中添加一個測試項目,這里選擇使用xUnit作為測試項目:

創(chuàng)建完成后的項目結(jié)構(gòu)如下圖所示:

我們首先在EFCoreTest項目中安裝Microsoft.EntityFrameworkCore和Microsoft.EntityFrameworkCore.InMemory這兩個包,直接在NuGet里面安裝即可,這里不在描述安裝步驟。添加完成以后添加對實體的引用。

我們創(chuàng)建數(shù)據(jù)上下文,繼承自DbContext:

/// <summary>
/// 數(shù)據(jù)上下文,繼承自DbContext
/// </summary>
public class EFCoreDbContext:DbContext
{
    /// <summary>
    /// 通過DbContextOptions選項給父類構(gòu)造傳參
    /// </summary>
    /// <param name="options"></param>
    public EFCoreDbContext(DbContextOptions options):base(options)
    {

    }

    // DbSet屬性
    public DbSet<Blog> Blogs { get; set; }
}

我們在創(chuàng)建一個方法,返回類型是DbContextOptions類型:

public static DbContextOptions<EFCoreDbContext> CreateDbContextOptions(string databaseName)
{
    var serviceProvider = new ServiceCollection().
        AddEntityFrameworkInMemoryDatabase()
        .BuildServiceProvider();

    var builder = new DbContextOptionsBuilder<EFCoreDbContext>();
    builder.UseInMemoryDatabase(databaseName)
        .UseInternalServiceProvider(serviceProvider);

    return builder.Options;
}

最后編寫測試代碼,整體代碼如下:

using EFCore.Model;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;
using Xunit;

namespace EFCoreTest
{

/// <summary>
/// 數(shù)據(jù)上下文,繼承自DbContext
/// </summary>
public class EFCoreDbContext:DbContext
{
    /// <summary>
    /// 通過DbContextOptions選項給父類構(gòu)造傳參
    /// </summary>
    /// <param name="options"></param>
    public EFCoreDbContext(DbContextOptions options):base(options)
    {

    }

    // DbSet屬性
    public DbSet<Blog> Blogs { get; set; }
}


    public class UnitTest1
    {

        public static DbContextOptions<EFCoreDbContext> CreateDbContextOptions(string databaseName)
        {
            var serviceProvider = new ServiceCollection().
                AddEntityFrameworkInMemoryDatabase()
                .BuildServiceProvider();

            var builder = new DbContextOptionsBuilder<EFCoreDbContext>();
            builder.UseInMemoryDatabase(databaseName)
                .UseInternalServiceProvider(serviceProvider);

            return builder.Options;
        }

        /// <summary>
        /// 測試方法,這里使用異步
        /// </summary>
        [Fact]
        public async void Test1()
        {
           var options=  CreateDbContextOptions("batabase");
            var context = new EFCoreDbContext(options);
            // 添加數(shù)據(jù)
            context.Blogs.Add(new Blog() { Name = "ef core" });
            // 保存
            context.SaveChanges();
            // 查詢數(shù)據(jù)
            var blog = await context.Blogs.FirstOrDefaultAsync(p => p.Id == 1);
            // 斷言
            Assert.NotNull(blog);
        }
    }
}

在測試方法上面右鍵,選擇“Live Unit Testing”,這個是實時的,我們可以在輸出窗口里面看到實時的信息:

啟動測試,在輸出窗口查看測試結(jié)果:

可以看到測試代碼前面都打勾了,表示測試通過。我們修改測試代碼,改為查詢id為2的數(shù)據(jù):

因為我們只添加了一條數(shù)據(jù),沒有id為2的那條數(shù)據(jù),所以測試報錯了。

到此為止,我們就完成了一個簡單的單元測試。

到此這篇關(guān)于對Entity Framework Core進行單元測試的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論