相关疑难解决方法(0)

如何对返回匿名对象的ASP.NET Core MVC控制器进行单元测试?

我无法对返回匿名对象的ASP.NET Core MVC控制器进行单元测试.单元测试在单独的项目中设置,并直接从主项目调用控制器方法.

控制器方法返回IActionResult但通常这些OkObjectResultBadRequestObjectResult对象被转换为具有适当HTTP状态代码的JSON响应.匿名对象作为对象的构造函数参数传递,ObjectResult正是这些我试图对(可访问的ObjectResult.Value)进行断言.

我发现这个问题(我如何访问asp.net 5中的内部)有一个答案,说使用动态和添加

[assembly: InternalsVisibleTo("Namespace")]
Run Code Online (Sandbox Code Playgroud)

到AssemblyInfo.cs允许测试项目访问匿名对象的内部对象属性.但是,最新版本的ASP.NET Core MVC没有AssemblyInfo.cs,并且在链接问题的答案中建议添加一个也不起作用.

是否现在有一个不同的位置来添加InternalsVisibleTo或我错过了什么?

c# unit-testing anonymous-types asp.net-core-mvc

9
推荐指数
1
解决办法
4232
查看次数

使用 Mock 进行 Nunit 测试。接口实例

我有以下(简化的)代码。

public class Controller
{
     private readonly IService _service;

     public Controller(IService service)
     {
         _service = service;
     }

     public async Task<IHttpActionResult> Create(MyObject object)
     {
         var result = _service.method(object);
         if (!result.Succeeded)
         {
            return this.GetErrorResult(object);
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

而 SimpleInjector 用于注入 _service 与其实现类之间的依赖关系,如下所示:

public static void Register(Container container)
{
    container.Register<IService, Service>();
}
Run Code Online (Sandbox Code Playgroud)

请注意,注入和单元测试对我来说是新的,所以我不完全理解它们,但正在学习。

如果我通过 Swagger 运行应用程序,一切正常。

请注意,Register当我通过 Swagger 运行应用程序时会调用该函数。

现在,我正在尝试使用 NUnit 设置一些单元测试,并像这样模拟 IService 对象:

var Service = new Mock<IService>();
Controller _controller = new Controller(Service.Object);
_controller.Create(new MyObject object());
Run Code Online (Sandbox Code Playgroud)

到目前为止,这对我来说似乎是正确的 - 尽管我不确定?

问题是对于单元测试, …

c# nunit moq mocking simple-injector

6
推荐指数
2
解决办法
3万
查看次数