2017-06-27 1 views
2

は、だから私はドキュメントから投げた例外についての例をコピーしようとした、と私の方法の一つにこれを追加しました:NSubstituteあいまいな呼び出したときにドキュメントの例以下(ただし、非同期メソッドを持つ)

.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, Func, params Func[])'

私が使っている方法は非同期メソッドです。私は最初の方法を待ってみましたが、それは別のエラーを返し、それ

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

UPDATEと言って: 私は、コンパイラのエラーを回避する方法として、非同期であることをリターンにラムダを変更するが、このことができます警告が表示されます。だから私は、警告が表示されずにこれをバイパスする方法があるかどうか、そしてラムダ自体の内部に不必要なコードを追加することなく、問題の詳細があると思いますか?

これを回避する手段はありますか? NS substitute 2.0.3を使用しています。

ありがとうございます。

答えて

5

Task<T>ではなくTaskを返す何かを呼び出すようなコンパイラエラーがありますか?このサンプルでは、​​私の作品:

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"); }); 
    // ... 
} 

私は一般的なTask<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>(...)を使用してあいまいさを取り除きました。これは、コンパイラエラーで説明されている最初のオーバーロードを選択します。

これで問題が解決しない場合は、テストするメソッドの署名を投稿できますか?

関連する問題