私はmockingにNsubstituteを使用しています。Nsubstitute:ジェネリッククラス内に偽物を作成する方法
が型「TValue」は、参照型である必要があります。
public class Tester<TValue> where TValue: IValue { // this is used inside the class in other methods private TValue CreateValue() { return Substitute.For<TValue>(); // here the compiler has an error } }
このコードは、マークされた場所でコンパイルエラーを与える:私は、一般的な属性を偽装し、一般的なクラスを作成するコードを減らすために、 するためには、ジェネリック型またはメソッドにパラメータ「T」として使用 「Substitute.For(paramsはオブジェクト[])は」
これは、明らかと思わSubstitute
クラスの実装ため次のようになります。Substitute.For<IValue>()
とエラーは発生しません:私はについてです疑問に思って何
public static class Substitute
{
public static T For<T>(params object[] constructorArguments) where T : class;
}
、なぜそのようなコードが可能です。誰でも、偽の権利でジェネリッククラスを行う方法を説明することはできますか?
ご回答ありがとうございます。 NSubstituteはクラスをジェネリックパラメータとして必要とするという制約を見ました。私は、Substitute.For()でインタフェースを使用することが可能であると思った。私のケースでは、 'TValue'ジェネリックパラメータをクラスに制約することはできません。なぜなら、私はそれがインターフェイス用に必要なためです。 –
scher
'IValue'のインターフェース定義(つまりファイル)と' IValue'を実装するすべてのクラス/構造体のファイルで投稿を更新できますか? – mjwills
私のコードサンプルの文脈における 'class'は、「インタフェースではなくクラス」を意味するのではなく、「クラスではなくクラス」を意味することに注意してください。あなたの目的のために上記のコードを試しましたか?それは動作しましたか? – mjwills