MoQ不设置Returns方法
MoQ does not set the Returns method
你好,我正在使用最小起订量,我想了解为什么我的方法的 return 值会被使用。
在下面的示例中,我正在使用模拟接口 dependency.I 创建服务,我正在设置接口方法应该 return 的内容。
但是,当服务使用我的模拟依赖项时, return 值为 null ,而不是我在 Returns
方法中设置的值。
为什么会这样?
型号
public class SomeModel
{
public string Name {get;set;}
}
模拟依赖
public interface IDependency
{
Task<SomeModel> GetByIdAsync(string input);
}
使用模拟依赖的服务
public class SomeService
{
private IDependency dependency;
public SomeService(IDependency dependency)
{
this.dependency=dependency;
}
public async Task<SomeModel> GetByIdAsync(string id)
{
var model=await this.dependency.GetByIdAsync(id); //why is the result null , i have set the `Returns`
if(model==null)
{
throw new NotSupportedException();
}
return model;
}
}
测试class
public class MyTest
{
[Testcase("data")]
public async Task CanGetById(string value)
{
var model=new SomeModel{Name=value};
var dependency=new Mock<IDependency>();
dependency.Setup(x=>x.GetByIdAsync(value)).Returns(Task.FromResult(model)).Verifiable(); //i have set up the return of the dependency
var service=new SomeService(dependency.Object);
var clone=await service.GetByIdAsync(value);
dependency.Verify();
}
}
只有在调用时传递给模拟成员的值与设置模拟时的预期值不匹配时,结果才会为 null
除了使用 ReturnsAsync
之外,还有其他选择
例如
[Testcase("data")]
public async Task CanGetById(string value) {
//Arrange
var model = new SomeModel { Name = value };
var dependency = new Mock<IDependency>();
dependency
.Setup(x => x.GetByIdAsync(value))
.ReturnsAsync(model)
.Verifiable();
var service = new SomeService(dependency.Object);
//Act
var clone = await service.GetByIdAsync(value);
//Assert
dependency.Verify();
}
你好,我正在使用最小起订量,我想了解为什么我的方法的 return 值会被使用。
在下面的示例中,我正在使用模拟接口 dependency.I 创建服务,我正在设置接口方法应该 return 的内容。
但是,当服务使用我的模拟依赖项时, return 值为 null ,而不是我在 Returns
方法中设置的值。
为什么会这样?
型号
public class SomeModel
{
public string Name {get;set;}
}
模拟依赖
public interface IDependency
{
Task<SomeModel> GetByIdAsync(string input);
}
使用模拟依赖的服务
public class SomeService
{
private IDependency dependency;
public SomeService(IDependency dependency)
{
this.dependency=dependency;
}
public async Task<SomeModel> GetByIdAsync(string id)
{
var model=await this.dependency.GetByIdAsync(id); //why is the result null , i have set the `Returns`
if(model==null)
{
throw new NotSupportedException();
}
return model;
}
}
测试class
public class MyTest
{
[Testcase("data")]
public async Task CanGetById(string value)
{
var model=new SomeModel{Name=value};
var dependency=new Mock<IDependency>();
dependency.Setup(x=>x.GetByIdAsync(value)).Returns(Task.FromResult(model)).Verifiable(); //i have set up the return of the dependency
var service=new SomeService(dependency.Object);
var clone=await service.GetByIdAsync(value);
dependency.Verify();
}
}
只有在调用时传递给模拟成员的值与设置模拟时的预期值不匹配时,结果才会为 null
除了使用 ReturnsAsync
例如
[Testcase("data")]
public async Task CanGetById(string value) {
//Arrange
var model = new SomeModel { Name = value };
var dependency = new Mock<IDependency>();
dependency
.Setup(x => x.GetByIdAsync(value))
.ReturnsAsync(model)
.Verifiable();
var service = new SomeService(dependency.Object);
//Act
var clone = await service.GetByIdAsync(value);
//Assert
dependency.Verify();
}