如何从我的项目访问我的MongoDB实例到我的xunit测试项目类?

问题描述 投票:0回答:2

我想提一下,我已经开始学习如何使用microsoft的官方文档在asp net core 2.1中构建apis,而且我是初学者。

我已经完成了一个示例任务,即使用MongoDB作为我的服务器构建一个简单的员工成就表单的api,并且已经使用Swashbuckle完成了文档,并且目前仍然使用xunit进行单元测试我的控制器方法,而我运行我的测试它返回错误:

消息:System.NullReferenceException:未将对象引用设置为对象的实例。

我已经尝试调试我的单元测试,我发现每次我的数据库实例“_empModel”返回null。为什么会这样?

在我的xunit项目中访问此mongoDb实例以执行测试的正确方法是什么?

这是我的代码快照的链接:https://drive.google.com/file/d/1jydiyuO_rSbx-2PXK0ZP8YoF8ho55avx/view?usp=sharing

c# asp.net mongodb
2个回答
0
投票

你获得null的原因是在你的单元测试中你正在调用EmployeeServices的无参数构造函数,并在你传入config的构造函数中创建你的empModel。您可以通过在测试项目中输入配置文件并将其传入来解决这个问题,但正如您在帖子的评论中所提到的,您应该嘲笑控制器中的服务。

如果你想测试整个堆栈(集成测试),那么你需要实例化并适当地传递所有内容,而不是模拟。


0
投票

所以我尝试过这种方法

在xunit项目中创建了名为xunittests.json的新json文件,在其中我声明了我的“ConnectionString”

然后我在我的类构造函数中声明了新的配置变量

public UnitTest1()

    {

        var config = new ConfigurationBuilder().AddJsonFile("xunittest.json", optional: true, reloadOnChange: true).Build();

        _empTestServices = new EmployeeServices(config);

        _empTestController = new EmpController(_empTestServices);

    }

这让我可以访问我的数据库实例,因为现在iam调用非空的EmployeeServices(Iconfiguration配置)构造函数,该构造函数具有_empModel

但是我的单元测试再次出现错误

消息:Assert.IsType()失败

预期:Microsoft.AspNetCore.Mvc.OkObjectResult

实际:( null)

现在我正在调查它祝我好运XD

© www.soinside.com 2019 - 2024. All rights reserved.