使用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);
         }
     }
}

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

public static void Register(Container container)
{
    container.Register<IService, Service>();
}

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

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

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

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

var Service = new Mock<IService>();
Controller _controller = new Controller(Service.Object);
_controller.Create(new MyObject object());

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

问题是对于单元测试,result它始终为null-我认为是因为我的接口的Mock存在问题-它似乎没有找到方法-它从不涉足该方法并且不会显示int他调试器。

注意,对于单元测试,Register不会调用方法。我确实尝试调用它来注册依赖项,但这没有帮助。

正如我上面所说,这对我来说是全新的,而我在所有这些方面都处于理解的边缘。

我没有主意,也不知道从哪里可以看到,所以我们将不胜感激。

编辑:

原始问题如下:

public async Task<IHttpActionResult> Create(string content)

我已更新为:

public async Task<IHttpActionResult> Create(MyObject object)

任何人都可以建议我如何MyObject在设置中传递泛型引用,而不必创建此类的实例。

因此,基本上我想告诉它,将传递此类的一个实例,而不创建该实例。

我尝试了以下方法:

Service.Setup(x => x.method(It.IsAny<MyObject>())

but it says cannot convert MethodGroup to MyObject

这是IService的定义:

public interface IService
{
      IdentityResult method(ApplicationUser user, UserLoginInfo login);
}
克里斯·皮克福德

您需要将Mock对象配置为返回IService.method以下内容:

var Service = new Mock<IService>();
Service.Setup(x => x.method(It.IsAny<string>())
    .Returns<string>(str => **whatever result you need**);

添加实际IService定义后,您应该将Setup调用更改为:

Service.Setup(x => x.method(It.IsAny<ApplicationUser>(), It.IsAny<UserLoginInfo>())
    .Returns<ApplicationUser, UserLoginInfo>((user, login) => new IdentityResult(true));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

减少针对不同接口实现的NUnit测试中的重复

IDRIS-使用相同的接口实例

如何使用接口实例创建列表

使用反射时如何找到接口实例的具体类型?

与 PhpUnit 的扩展接口实例

避免使用大型类进行接口实现

在C#中测试两个接口实例之间的值相等性?

返回接口实例而不声明变量而不进行强制转换

不同类型的接口实例的数组

类不返回接口实例PHP

初始化接口实例变量

用接口实例调用通用方法

如何从Unity获取接口实例?

将对象从接口实例分配到另一个接口实例

使用EF Plus IncludeFilter遇到“无法创建接口实例”错误

如何使用接口实例属性序列化一个类?得到了NotSerializableException

如何使用Unity.WebApi通过接口实例访问类属性

访问使用接口实例化的类的私有成员

使用 NUnit 在单元测试期间实现接口列表

Idris 中接口实例的接口约束

MVC 5中的接口问题“无法创建接口实例”

匿名接口实例作为Kotlin中的接口属性

实现接口与创建接口实例之间的区别

实例化实现通用接口实例的所有类

如何编写面向对象的程序以使用超类,子类和接口实例化对象和接口

如何编写面向对象的程序以使用超类,子类和接口实例化对象和接口

使用包含非导出参数类型的方法进行接口实现(Java 9模块)

使用@Autowired进行接口实现的JaCoCo代码覆盖率

使用NUnit使用异步/等待方法进行单元测试