我有以下(简化)代码。
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] 删除。
我来说两句