C# 使用ForPartsOf并模拟异步方法时,NSSubstitute返回NullReferenceException
我有两种方法:C# 使用ForPartsOf并模拟异步方法时,NSSubstitute返回NullReferenceException,c#,unit-testing,mocking,xunit,nsubstitute,C#,Unit Testing,Mocking,Xunit,Nsubstitute,我有两种方法: public class MyClass { public virtual async Task MethodOne(MyModel myModel) { await Task.Delay(1); throw new Exception("Test"); } public async Task MethodTwo() { MyModel myModel = new MyModel();
public class MyClass
{
public virtual async Task MethodOne(MyModel myModel)
{
await Task.Delay(1);
throw new Exception("Test");
}
public async Task MethodTwo()
{
MyModel myModel = new MyModel();
await MethodOne(myModel);
}
}
MyModel是什么并不重要,但它是一个参数也很重要
以及测试:
[Fact]
public async Task Test6()
{
// Arrange
MyClass myClass = Substitute.ForPartsOf<MyClass>();
myClass.When(async a => await a.MethodOne(Arg.Any<MyModel>())).DoNotCallBase();
// Act
await myClass.MethodTwo();
// Assert
}
我的猜测是,在某种程度上,它正试图解析MyModel
;但是,当在同步方法上或在没有复杂参数的方法上执行时,相同的测试也可以工作
有人能告诉我为什么会出现这种错误吗
任务
,以允许在测试中调用async时完成[Fact]
public async Task Test6() {
// Arrange
var myClass = Substitute.ForPartsOf<MyClass>();
myClass.MethodOne(Arg.Any<MyModel>()).Returns(Task.FromResult((object)null));
// Act
await myClass.MethodTwo();
// Assert
//...
}
[事实]
公共异步任务Test6(){
//安排
var myClass=Substitute.ForPartsOf();
MethodOne(Arg.Any()).Returns(Task.FromResult((object)null));
//表演
等待myClass.MethodTwo();
//断言
//...
}
1)不要等待安装2)重写的方法需要返回一个任务,以允许async流向Completion,从而阻止问题的发生-但没有回答我的问题,即为什么会发生这种情况,因为在等待安装时,它实际上是在试图调用该方法,该方法需要编译表达式,因此需要获取传入的参数将为null,因为Arg.*
没有给出实际的对象。是-当然是。奇怪的是,你怎么能看东西看了很久却看不到明显的东西。谢谢你的帮助
[Fact]
public async Task Test6() {
// Arrange
var myClass = Substitute.ForPartsOf<MyClass>();
myClass.MethodOne(Arg.Any<MyModel>()).Returns(Task.FromResult((object)null));
// Act
await myClass.MethodTwo();
// Assert
//...
}