最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、引言

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

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

我們還是以上面文章中創(chuàng)建的項(xiàng)目為例,在解決方案中添加一個(gè)測試項(xiàng)目,這里選擇使用xUnit作為測試項(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>
    /// 通過DbContextOptions選項(xiàng)給父類構(gòu)造傳參
    /// </summary>
    /// <param name="options"></param>
    public EFCoreDbContext(DbContextOptions options):base(options)
    {

    }

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

我們?cè)趧?chuàng)建一個(gè)方法,返回類型是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選項(xiàng)給父類構(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”,這個(gè)是實(shí)時(shí)的,我們可以在輸出窗口里面看到實(shí)時(shí)的信息:

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

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

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

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

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

相關(guān)文章

  • SQL Server 2008 R2:error 26 開啟遠(yuǎn)程連接詳解

    SQL Server 2008 R2:error 26 開啟遠(yuǎn)程連接詳解

    本篇文章小編為大家介紹,SQL Server 2008 R2:error 26 開啟遠(yuǎn)程連接詳解。需要的朋友參考下
    2013-04-04
  • asp.net core項(xiàng)目授權(quán)流程詳解

    asp.net core項(xiàng)目授權(quán)流程詳解

    本文詳細(xì)講解了asp.net core項(xiàng)目的授權(quán)流程,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • Automation服務(wù)器不能創(chuàng)建對(duì)象的多種解決辦法

    Automation服務(wù)器不能創(chuàng)建對(duì)象的多種解決辦法

    這篇文章主要介紹了Automation服務(wù)器不能創(chuàng)建對(duì)象的多種解決辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • .NET C#創(chuàng)建WebService服務(wù)簡單實(shí)例

    .NET C#創(chuàng)建WebService服務(wù)簡單實(shí)例

    這篇文章主要為大家詳細(xì)介紹了.NET C# 創(chuàng)建WebService服務(wù)簡單實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • ASP.NET WebAPI2復(fù)雜請(qǐng)求跨域設(shè)置的方法介紹

    ASP.NET WebAPI2復(fù)雜請(qǐng)求跨域設(shè)置的方法介紹

    這篇文章主要給大家介紹了關(guān)于ASP.NET WebAPI2復(fù)雜請(qǐng)求跨域設(shè)置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用ASP.NET具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 使用asp.net的pageDataSource中時(shí)索引問題解決方法

    使用asp.net的pageDataSource中時(shí)索引問題解決方法

    當(dāng)前頁面在數(shù)據(jù)的除第一頁的任何一個(gè)頁面時(shí),重新條件查詢并且是新條件的總頁數(shù)小于剛才查詢得到的頁碼時(shí),就會(huì)出現(xiàn)“索引 20 不是為負(fù)數(shù),就是大于行數(shù)”的類似的錯(cuò)誤
    2013-04-04
  • TreeView無刷新獲取text及value實(shí)現(xiàn)代碼

    TreeView無刷新獲取text及value實(shí)現(xiàn)代碼

    這篇文章介紹了TreeView無刷新獲取text及value實(shí)現(xiàn)代碼,有需要的朋友可以參考一下
    2013-10-10
  • 如何使用.NET Core 選項(xiàng)模式【Options】

    如何使用.NET Core 選項(xiàng)模式【Options】

    這篇文章主要介紹了如何使用.NET Core 選項(xiàng)模式,文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • asp.net Gridview行綁定事件新體會(huì)

    asp.net Gridview行綁定事件新體會(huì)

    最近在做統(tǒng)計(jì)GridView中某一列的加總值,之前有在RowDataBound事件中中逐筆加總,經(jīng)過測試才知道,這是不正確的,并不能得到所有資料的加總值。
    2009-11-11
  • C#各種集合操作的性能總結(jié)

    C#各種集合操作的性能總結(jié)

    本文主要記錄的是C#各種集合操作的性能,下面的標(biāo)記說明描述標(biāo)記的時(shí)間,下面的表格對(duì)比各種集合各種操作的時(shí)間,需要了解的朋友可以參考下
    2012-12-12

最新評(píng)論

临安市| 阳城县| 金昌市| 新竹县| 繁昌县| 利津县| 杨浦区| 峨边| 伊川县| 棋牌| 海安县| 清丰县| 丹巴县| 忻州市| 江永县| 安西县| 绵阳市| 淳化县| 扎鲁特旗| 桓仁| 东辽县| 屏边| 洪雅县| 神农架林区| 虞城县| 沛县| 新巴尔虎左旗| 南通市| 通渭县| 鹤壁市| 呼玛县| 包头市| 平塘县| 阿拉善左旗| 芮城县| 句容市| 大宁县| 抚顺市| 紫阳县| 赤水市| 个旧市|