亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

對(duì)Entity?Framework?Core進(jìn)行單元測(cè)試

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

一、引言

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

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

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

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

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

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

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

    }

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

我們?cè)趧?chuàng)建一個(gè)方法,返回類(lèi)型是DbContextOptions類(lèi)型:

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

最后編寫(xiě)測(cè)試代碼,整體代碼如下:

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>
    /// 通過(guò)DbContextOptions選項(xiàng)給父類(lèi)構(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>
        /// 測(cè)試方法,這里使用異步
        /// </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();
            // 查詢(xún)數(shù)據(jù)
            var blog = await context.Blogs.FirstOrDefaultAsync(p => p.Id == 1);
            // 斷言
            Assert.NotNull(blog);
        }
    }
}

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

啟動(dòng)測(cè)試,在輸出窗口查看測(cè)試結(jié)果:

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

因?yàn)槲覀冎惶砑恿艘粭l數(shù)據(jù),沒(méi)有id為2的那條數(shù)據(jù),所以測(cè)試報(bào)錯(cuò)了。

到此為止,我們就完成了一個(gè)簡(jiǎn)單的單元測(cè)試。

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

相關(guān)文章

最新評(píng)論