asp.net mvc-如何在c#中对firstorddefault()进行单元测试

本文关键字:firstorddefault 单元测试 中对 mvc- net asp | 更新日期: 2023-09-27 17:58:48

我想模拟以下代码行(通过C#、MVC中的MOQ):-

CustomerDto target = CustomerService.GetAllCustomer().FirstOrDefault(n => n.CustomerID == customer.CustomerID);

其中CustomerService.GetAllCustomer()函数是控制器方法中的依赖项。

其中它使用FirstOrDefault()函数。在单元测试中,我不知道如何模拟它

有人能给我提个办法吗?

asp.net mvc-如何在c#中对firstorddefault()进行单元测试

仅模拟(存根)依赖项。在这种情况下,它是CustomerService,它应该是某种接口或抽象类实现。使您的GetAllCustomer方法返回一些假客户。FirstOrDefault是一个.NET Framework方法,不应该进行测试(它已经由框架开发人员进行了测试)

IMO,您需要通过转向更分层的方法来开始解耦代码。我不太确定通过嘲笑FirstOrDefault方法需要实现什么。我建议有三层,他们的测试如下-

数据访问-使用EF及其DB上下文并实现数据访问接口。您应该在不嘲笑EF的数据库上下文的情况下对此进行单元测试。该层的测试将取决于"状态"。我的意思是,您的测试将使用CRUD操作的真实数据和数据库。您只需要确保在测试运行后不会保留对数据库的更改。可以使用Spring.Net的测试库来实现这一点,也可以简单地在事务范围下运行测试,并在每次测试运行后回滚事务(在清理中)。

业务逻辑-包含业务逻辑并与数据访问接口一起工作。使用任何DI框架,如spring.net或ms-unity来注入数据访问层。您应该通过尝试避免实际的数据库调用来对此进行单元测试。这就是NMock、Rhinomock或MOQ之类的东西出现在画面中的地方。使用mock设置边界和异常条件,并确保您的业务逻辑解决了所有问题。

MVC控制器-将调用委托给业务逻辑层,很可能处理UI上需要的通知等内容。如果控制器真的需要进行单元测试,这应该是一个判断调用。这可能比通常情况下更过分。我建议考虑使用硒或微软的编码UI测试之类的自动化UI测试用例。