C# 如何模拟(等待)系统.Threading.Tasks.Task<;emresponse>;在c中#
我是C#的新手,一直试图模拟类型为C# 如何模拟(等待)系统.Threading.Tasks.Task<;emresponse>;在c中#,c#,task,nunit,moq,C#,Task,Nunit,Moq,我是C#的新手,一直试图模拟类型为System.Threading.Tasks.Task的对象,但未能成功。谁能帮我嘲笑一下吗 public class PEProcessor : IPEProcessor { public PEProcessor(IService service) { _proxy = service; _emUpdate = new EMUpdate(service); } public void Crea
System.Threading.Tasks.Task
的对象,但未能成功。谁能帮我嘲笑一下吗
public class PEProcessor : IPEProcessor
{
public PEProcessor(IService service)
{
_proxy = service;
_emUpdate = new EMUpdate(service);
}
public void CreateAddress(string modelName, string version, string name, MType mType, Address address, EMRequest request)
{
var response = _proxy.EMCreateAsync(request); // should return object of type (awaitable) System.Threading.Tasks.Task<EMCResponse>
address.Id = Convert.ToInt32(response.Result.CM[0].Code);
}
}
公共类PEProcessor:IPEProcessor
{
公共处理器(iSeries设备服务)
{
_代理=服务;
_emUpdate=新的emUpdate(服务);
}
public void CreateAddress(字符串模型名、字符串版本、字符串名称、MType MType、地址、EMRequest请求)
{
var response=_proxy.EMCreateAsync(request);//应返回System.Threading.Tasks.Task类型(可等待)的对象
address.Id=Convert.ToInt32(response.Result.CM[0].Code);
}
}
我嘲笑如下
[Fact]
public void RequestIsVerifiable()
{
//Arrange
var wcfMock = new Mock<IService>();
// wcfMock.Setup(x => x.EMCreateAsync(It.IsAny<EMCreateRequest>())).ReturnAsync(??);
//Act
var peProcessor = new PEProcessor(wcfMock.Object);
peProcessor.CreateAddress(MoqData.ModelName, MoqData.version, MoqData.name,
MoqData.MType, MoqData.AddressesList(), MoqData.EMRequest);
//Assert
wcfMock.Verify(service => service.EMCreateAsync(It.IsAny<EMCreateRequest>()), Times.AtLeastOnce);
}
[事实]
public void RequestIsVerifiable()
{
//安排
var wcfMock=new Mock();
//Setup(x=>x.EMCreateAsync(It.IsAny()).ReturnAsync(?);
//表演
var peProcessor=新的peProcessor(wcfMock.Object);
peProcessor.CreateAddress(MoqData.ModelName、MoqData.version、MoqData.name、,
MoqData.MType、MoqData.AddressesList()、MoqData.EMRequest);
//断言
Verify(service=>service.EMCreateAsync(It.IsAny()),Times.atlestOnce);
}
提前谢谢 如果您只想延迟某个结果或执行,以模拟某个操作正在异步完成,您可以使用:
await Task.Delay(5000);//5000 means 5 seconds.
或者,如果您希望稍后执行该任务,则可以执行以下操作
var obj = SomeFunctionAsync().AsTask(); // this will return u a IAsyncOperation object.
//some lines of code.
var result = await obj; //and this line will actually execute the method asyncronosly and return u the required value (if any).
然后,您需要设置mock以返回预期结果,以便可以按预期执行测试
var response = new EMCResponse {
//populate
};
wcfMock
.Setup(x => x.EMCreateAsync(It.IsAny<EMCreateRequest>()))
.ReturnAsync(response);
var响应=新的响应{
//填充
};
wcfMock
.Setup(x=>x.EMCreateAsync(It.IsAny()))
.ReturnAsync(响应);
也就是说,如果有可能将代码重构为始终异步的,并且不必进行阻塞调用
public class PEProcessor : IPEProcessor {
public PEProcessor(IService service) {
_proxy = service;
_emUpdate = new EMUpdate(service);
}
public async Task CreateAddress(string modelName, string version, string name, MType mType, Address address, EMRequest request) {
var response = await _proxy.EMCreateAsync(request); // should return object of type (awaitable) System.Threading.Tasks.Task<EMCResponse>
address.Id = Convert.ToInt32(response.CM[0].Code);
}
}
公共类PEProcessor:IPEProcessor{
公共处理器(iSeries设备服务){
_代理=服务;
_emUpdate=新的emUpdate(服务);
}
公共异步任务CreateAddress(字符串模型名、字符串版本、字符串名称、MType MType、地址地址、EMRequest){
var response=await _proxy.EMCreateAsync(request);//应返回类型为(awaitable)System.Threading.Tasks.Task的对象
address.Id=Convert.ToInt32(response.CM[0].Code);
}
}
可按如下方式执行此操作:
[Fact]
public async Task RequestIsVerifiable() {
//Arrange
var wcfMock = new Mock<IService>();
var response = new EMCResponse {
//populate
};
wcfMock
.Setup(x => x.EMCreateAsync(It.IsAny<EMCreateRequest>()))
.ReturnAsync(response);
var peProcessor = new PEProcessor(wcfMock.Object);
//Act
await peProcessor.CreateAddress(MoqData.ModelName, MoqData.version, MoqData.name,
MoqData.MType, MoqData.AddressesList(), MoqData.EMRequest);
//Assert
wcfMock.Verify(service => service.EMCreateAsync(It.IsAny<EMCreateRequest>()), Times.AtLeastOnce);
}
[事实]
公共异步任务请求可验证(){
//安排
var wcfMock=new Mock();
var响应=新的EMR响应{
//填充
};
wcfMock
.Setup(x=>x.EMCreateAsync(It.IsAny()))
.ReturnAsync(响应);
var peProcessor=新的peProcessor(wcfMock.Object);
//表演
等待peProcessor.CreateAddress(MoqData.ModelName、MoqData.version、MoqData.name、,
MoqData.MType、MoqData.AddressesList()、MoqData.EMRequest);
//断言
Verify(service=>service.EMCreateAsync(It.IsAny()),Times.atlestOnce);
}
您希望任务的表现如何?如果您想立即完成,可以使用Task.FromResult(…)
。似乎没有必要在此处模拟任务;您只需模拟任务的结果-任务本身可以预先完成。我希望response.result.CM[0]。code
值存在,但我得到的response.result
本身为空。所以我只是想用数据来停止通话。但是我不知道该怎么办!!但我没有得到我所期望的数据。我不能模拟调用以返回某个对象吗?类似于when().thenReturn()
的内容,如Java
中的内容。