問題タブ [nsubstitute]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - NSubstitute クリア When().Do()
NSubstitute を使用して、以前の .When().Do() 構成をクリアまたは削除することは可能ですか?
c# - C# で Object Mother クラスを自動作成する
単体テストにObject Motherを使用していますが、すべての OM クラス == 重複するクラス構造を書きたくありません。OM クラスを自動的に生成するベース OM クラスを作成することは可能ですか?
これにより、すべてのプロパティが public として作成され、クラス オブジェクトを作成してすべてのプロパティを注入するメソッド CreateInstance が作成されます。出来ますか?ベストプラクティスは何ですか? または、自動T4コード生成などかもしれません。ありがとうございます。
c# - nsubstitute を使用して set プロパティ メソッドをオーバーライドする方法
単体テストでは、nsubstitute を使用してビューを登録するときに、すべてのビューを置き換えました。ただし、ビューの 1 つを破棄しようとすると、(オブジェクト型の) プロパティの 1 つを null に設定するとエラーがスローされます。エラーは「値を null にすることはできません。パラメータ名: コレクション」です。
回避策として、nsubstitute を使用してこのプロパティの set メソッドをインターセプトし、引数が null の場合は無視するか、別の値に設定します。
私は多くのバリエーションを試しましたが、私が必要としているのは When..Do だと思いますが、それを実装する運はありません。これが私の最後の試みです:
参考までに、nsubstitute エラーのスタック トレースを次に示します。
nsubstitute - NSubstitute: Arg.Do が呼び出されたパラメーターのリストを満たしていません
以下のコードでは、このアサート エラーが発生し、その理由がわかりません。
Assert.AreEqual failed. Expected:<2>. Actual:<0>.
autofac - NSubstitute と Autofac - アサーションが期待どおりに機能しない
次のクラスを持つ Web API プロジェクトがあります。このクラスは、基本的にすべてのApiControllerインスタンスを登録して設定していDependencyResolverます。
このクラスが実際にすべての API コントローラーを設定していることをテストするために、次のテストを行いました。
このテストを実行すると、次の例外が発生しますNSubstitute
これは紛らわしい出力です。実際の呼び出しと予想される呼び出しがまったく同じである場合、なぜNSubstitute満足できないのか理解できません。手がかりはありますか?
c# - 内部プロパティは NSubstitute によって処理されません
次のクラスがあるとします。
ここで、NSubstitute を使用してモックを作成してみます。
しかし、それは失敗します:
アセンブリ 'DynamicProxyGenAssembly2、Version=0.0.0.0、Culture=neutral、PublicKeyToken=a621a9e7e5c32e69' のタイプ 'Castle.Proxies.TestProxy' のメソッド 'get_Prop' には実装がありません。
に追加NSubstituteすることを考えまし[InternalsVisibleTo]たが、残念ながら、テストしたアセンブリは署名されていますが、署名されていないクラスでNSubstituteはなく、署名されていないクラスにInternalsすることもできませんVisibleTo。
どうすればこの問題を解決できますか?
c# - クラス内で 2 レベル下がったスタブ/モック
テストできない設定プロバイダーがあります (企業のレガシー コード)。テストできないコードの量を減らすために、設定プロバイダーを設定リポジトリにラップしようとしています。したがって、Settings プロバイダーを使用して 20 個のメソッドを使用する代わりに、1 個のメソッドを使用します。残りは SettingsRepository インターフェースを実装します。
その後、テストを行うのに問題がありますが、これは通常、何か間違ったことをしたことを示しています。
あなたが何を見つけるのを手伝ってくれることを願っています。
Unity を使用してリポジトリを挿入します。リポジトリから何かを取得する方法は次のとおりです。
ここで問題です。nsubstituteを使用して SettingsRepository インターフェイスをモック/スタブできますが、実際に行う必要があるのは、「設定」をモックして、SecureCache のリターンをセットアップすることです。
nsubstitute で「ディープモック」する方法はありますか?次のようなことができます:
現在、「設定」はnullであり、そこでモックできるものはありません。
私のフォールバック ソリューションは、SettingsRepository にすべての設定フィールドを直接追加することですが、テストできないコードをソリューションの別の場所に移動するだけなので、それは避けたいと思います。
c# - タイプ 'Castle.Proxies.XProxy' のオブジェクトを WPF デザイナでタイプ 'X' にキャストできません
私は最近、WPF コンポーネントの Blend から非常に便利な設計時属性を発見しました。これにより、(とりわけ) 設計時にのみ DataContext を設定できます。素晴らしい!
DesignInstance 属性と組み合わせて、デザイン時に自動的に作成およびバインドされる型を設定できます。これにより、実行時に WPF コンポーネントが実際にどのように見えるかについて、いくつかのコンテキストで Visual Studio Designer を使用できます。それは本当に素晴らしく、発見するのにそれほど時間がかからなかったらよかったのにと思います。
明らかに、私はここにいて、プログラマー天国で暮らしていないので、これらの設計時の属性を使用しているときに問題に遭遇しました。
パラメーターなしのコンストラクターを持つ ViewModels の周りにデザイン時のラッパーを作成しました (デザイナーが作成できるようにするため)。コンストラクター内では、NSubstitute を使用して、継承元の ViewModel に注入されたすべての依存関係をモックアウトします。
デザイナーでこの設計時クラスを使用すると、次のようなエラーが発生します。
Unable to cast object of type 'Castle.Proxies.XProxy' to type 'X'.
(X は、注入された依存関係の 1 つに置き換えられます)。
次の最小限のコード セットを使用して、問題を再現できます。
次のファイルを使用して、VS2013 で .NET Framework 4.5.1 をターゲットとする WPF アプリケーションを作成します (以前のバージョンでも発生する可能性がありますが、わかりません)。
View.xaml
ViewModel.cs
DesignTimeViewModel.cs
XDependency.cs
ソリューションをコンパイルして閉じ、再度開き、デザイナーで View.xaml を開きます。それはうまくいきます。次に、デザイナーを閉じ、ソリューションをリビルドし、デザイナーで View.xaml を再度開くと、次のエラーが表示されます。
Unable to cast object of type 'Castle.Proxies.XDependencyProxy_1' to type 'DesignTimeNSubstituteIssue.Services.XDependency'.
このエラーが発生すると、デザイナーは指定された DesignTimeViewModel の使用を停止し、DataContext をまったく持たない状態に戻ります。
これを修正する唯一の方法は、ソリューションを閉じて再度開くことです。
何が起こっているのかはわかっていると思いますが、なぜそれが起こっているのか、それを修正する方法はわかりません。
最初のコンパイルで、デザイナーはアセンブリへの参照を取得してキャッシュしていると思います。2 回目のコンパイルが行われると、アセンブリが再構築され、ほとんど同じになりますが、NSubstitute プロキシはCastle.Proxies.XDependencyProxy_2、最初のアセンブリにはなかった新しいサフィックス (など) で再生成されるため、設計者はそのプロキシがそのプロキシであることを知りません。 XDependency インターフェイスを実際に実装します。これは私の純粋な推測です。
NSubstitute を使用せず、手動で依存関係をモックすることで回避策を作成できますが、誰かがこの問題に光を当てることができるかどうかを知りたいです。