加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 遵循文档示例(但使用异步方法)时,NSubstitute模糊调用

发布时间:2020-12-15 23:39:37 所属栏目:百科 来源:网络整理
导读:所以我尝试从文档中复制一个关于异常抛出的示例,并将其添加到我的一个方法中: .Returns( x = { throw new Exception(); }); 但是这会导致以下编译器错误: Error CS0121 The call is ambiguous between the following methods or properties: ‘SubstituteE
所以我尝试从文档中复制一个关于异常抛出的示例,并将其添加到我的一个方法中:

.Returns( x => { throw new Exception(); });

但是这会导致以下编译器错误:

Error CS0121 The call is ambiguous between the following methods or
properties: ‘SubstituteExtensions.Returns(T,Func,
params Func[])’ and
‘SubstituteExtensions.Returns(Task,params
Func[])’

我正在使用的方法是异步方法.我尝试先等待该方法,但返回一个不同的错误,说它

can not return value of type X for (expected type Task`1)

更新:
我可以将返回中的lambda更改为异步,以此来绕过编译器错误,但这会导致警告.所以我想现在的问题更多的是关于是否有一种方法可以在没有警告显示的情况下绕过它,并且不会在lambda本身内添加不必要的等待代码?

有办法避免这种情况吗?我正在使用NSubstitute 2.0.3

感谢您的任何帮助.

解决方法

您的问题中的编译器错误看起来像是在调用返回Task而不是Task< T>?这个样本适合我:

public interface ISample {
    Task DoStuff(string name);
}

[Test]
public async Task SampleTest()
{
    var sample = Substitute.For<ISample>();
    sample.DoStuff("test").Returns(x => { throw new Exception("doh"); });
    // ...
}

当我有一个通用的任务< T>时,我倾向于得到那个错误,可以通过在.Returns()调用中指定返回类型来修复,如下所示:

public interface IRepository {
    Task<int> FindId(string name);
}

[Test]
public async Task SampleTest2()
{
    var sample = Substitute.For<IRepository>();
    sample.FindId("test").Returns<int>(x => { throw new Exception("doh"); });
    // ...
}

在上面的例子中,我通过使用.Returns< int>(…)删除了歧义,它将选择编译器错误中提到的第一个重载.

如果这没有帮助你可以发布被测试方法的签名吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读