如何从我的项目访问我的MongoDB实例到我的xunit测试项目类?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从我的项目访问我的MongoDB实例到我的xunit测试项目类?相关的知识,希望对你有一定的参考价值。
我想提一下,我已经开始学习如何使用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
你获得null的原因是在你的单元测试中你正在调用EmployeeServices的无参数构造函数,并在你传入config的构造函数中创建你的empModel。您可以通过在测试项目中输入配置文件并将其传入来解决这个问题,但正如您在帖子的评论中所提到的,您应该嘲笑控制器中的服务。
如果你想测试整个堆栈(集成测试),那么你需要实例化并适当地传递所有内容,而不是模拟。
所以我尝试过这种方法
在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
以上是关于如何从我的项目访问我的MongoDB实例到我的xunit测试项目类?的主要内容,如果未能解决你的问题,请参考以下文章