C# xUnit,Moq-测试.Net核心存储库

C# xUnit,Moq-测试.Net核心存储库,c#,asp.net-core,.net-core,tdd,moq,C#,Asp.net Core,.net Core,Tdd,Moq,我正在学习用xUnit和Moq编写单元测试,我有点问题。我在一个测试中编写了两个测试,我添加了一个类别并下载了所有测试,通过Assert或其他方式进行检查。在第二种情况下,我还添加了类别,并获得了添加类别的详细信息,不幸的是,我无法显示下载类别的详细信息,这是TestCategoryDetails测试。我做错了什么 using Moq; using relationship.Models; using Xunit; using Xunit.Abstractions; namespace Tes

我正在学习用xUnit和Moq编写单元测试,我有点问题。我在一个测试中编写了两个测试,我添加了一个类别并下载了所有测试,通过Assert或其他方式进行检查。在第二种情况下,我还添加了类别,并获得了添加类别的详细信息,不幸的是,我无法显示下载类别的详细信息,这是TestCategoryDetails测试。我做错了什么

using Moq;
using relationship.Models;
using Xunit;
using Xunit.Abstractions;

namespace Testy
{
    public class UnitTest1
    {
        private readonly ITestOutputHelper _output;
        public UnitTest1(ITestOutputHelper output)
        {
            _output = output;
        }

        [Fact]
        public void TestCategoryList()
        {
            var categoryMock = new Mock<ICategoryRepository>();
            var contextMock = new Mock<AppDbContext>();
            categoryMock.Setup(x => x.AddCategory(new GameCategory { Id= 1, Name = "Tester" }));

            var result = categoryMock.Object;
            Assert.NotNull(result.GameCategory());
        }

        [Fact]
        public void TestCategoryDetails()
        {
            var categoryMock = new Mock<ICategoryRepository>();
            var contextMock = new Mock<AppDbContext>();
            categoryMock.Setup(x => x.AddCategory(new GameCategory { Id = 1, Name = "Tester" }));

            var result = categoryMock.Object;
            var categoryDetails = result.GetDetails(1);
            Assert.NotNull(categoryDetails);
        }
    }
}
使用Moq;
使用关系模型;
使用Xunit;
使用Xunit.抽象;
名称空间测试
{
公共类UnitTest1
{
私有只读ITestOutputHelper\u输出;
公共单元测试1(ITestOutputHelper输出)
{
_输出=输出;
}
[事实]
公共void TestCategoryList()
{
var categoryMock=new Mock();
var contextMock=new Mock();
Setup(x=>x.AddCategory(新游戏类别{Id=1,Name=“Tester”}));
var result=categoryMock.Object;
Assert.NotNull(result.GameCategory());
}
[事实]
public void TestCategoryDetails()
{
var categoryMock=new Mock();
var contextMock=new Mock();
Setup(x=>x.AddCategory(新游戏类别{Id=1,Name=“Tester”}));
var result=categoryMock.Object;
var categorydeails=result.GetDetails(1);
Assert.NotNull(categoryDetails);
}
}
}

一般来说,我想通过检查如何添加、编辑、删除、下载所选存储库的所有类别和详细信息来测试我的存储库,不幸的是,我什么都没做。

你在做的是尝试测试存储库抽象模型。但是您需要测试您的实现

使用db上下文进行测试的好方法是对真实上下文使用内存提供程序。详情请参阅:

最后可能是这样(第二次测试):


您所做的是尝试测试存储库抽象模型。但是您需要测试您的实现

使用db上下文进行测试的好方法是对真实上下文使用内存提供程序。详情请参阅:

最后可能是这样(第二次测试):


可以安全地说这不再是一个单元测试了吗?因为测试将调用数据库(即使它是内存中的数据库)?在我看来,这是一个集成测试。可以安全地说,这不再是一个单元测试了吗?因为测试将调用数据库(即使它是内存中的数据库)?这是一个集成测试。
...

[Fact]
public void TestCategoryDetails()
{
    // arrange
    var categoryRepository = new CategoryRepository(GetContextWithInMemoryProvider());

    // act
    categoryRepository.AddCategory(new GameCategory { Id = 1, Name = "Tester" });
    var categoryDetails = categoryRepository.GetDetails(1);

    // assert
    Assert.NotNull(categoryDetails);
}

private AppDbContext GetContextWithInMemoryProvider()
{
    // create and configure context
    // see: https://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/
}

...