Moq、プライベートコンストラクターでオブジェクトをmoqする方法は?

ボリス

私はこのクラス階層を持っています

public class Order
{  
    private Client _client;
    public virtual Client { get => _client; }

    private OrderNumber _orderNumber;
    public virtual OrderNumber OrderNumber { get => _orderNumber; }

    private ShippingDetails _shippingDetails;
    public virtual ShippingDetails ShippingDetails { get => _shippingDetails; }

    private IList<Product> _products;
    protected internal virtual IEnumerable<Product> Products { get => _products; }


    public Order() { }

    public virtual void CreateDraftForClient(int id)
    {
         /// => business rule validation of value 

         _client= new Client(id);

          /// => event     
     }
}

public class Client
{
    private int _id;
    public virtual int Id { get => _id; }

    private Client() { }
    protected internal Client(int id) 
    {
        SetId(id);
    }

    private void SetId(int id)
    {
        _id = id; 
    }
}

そして、完全に初期化された順序のモックを作成したい

 clientMock = new Mock<Client>();
 clientMock.SetupGet(prop => prop.Client).Returns(1);

 orderMock = new Mock<Order>();
 orderMock.SetupGet(prop => prop.Client).Returns(orderMock.Object);

例外:

Message: System.AggregateException : One or more errors occurred. (Can not instantiate proxy of class: Client. Could not find a parameterless constructor.) (The following constructor parameters did not have matching fixture data: eRxTestSetup testSetup)
---- Castle.DynamicProxy.InvalidProxyConstructorArgumentsException : Can not instantiate proxy of class: Client. Could not find a parameterless constructor.
---- The following constructor parameters did not have matching fixture data: eRxTestSetup testSetup

クライアントの構造を変更せずにそうすることができる方法はありますか?または、そうでない場合、他にどのようなオプションがありますか?

Nkosi

Order現在の定義を考えると、嘲笑される簡単な方法はありません

目的の引数をモックに渡して、保護されたコンストラクターを介してモックを作成してみてください

int id = 1;
var clientMock = new Mock<Client>(id);
clientMock.SetupGet(prop => prop.Id).Returns(id);

var orderMock = new Mock<Order>();
orderMock.SetupGet(prop => prop.Client).Returns(clientMock.Object);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Moqでオブジェクトタイプパラメータを確認する方法

コンストラクターで非プライベートオブジェクトを作成する

MoqオブジェクトをC#クラスコンストラクターに渡すことは可能ですか?

オブジェクトインスタンスでコンストラクタのプライベートメソッドを使用する方法

コンストラクターが非const参照をパラメーターとして食べるプライベートオブジェクトメンバーでオブジェクトを初期化する方法

クラスコンストラクター内でオブジェクトを文書化する方法は?

Moqはオブジェクトパラメータで検証します

QTカスタムオブジェクトでデフォルトコンストラクターをプライベートにする

プライベートコンストラクターを持ち、コンパニオンオブジェクト内でメソッドを使用してクラスをインスタンス化することの利点は何ですか?

変更できないクラスのプライベートコンストラクターでオブジェクトをモックします

コピーコンストラクターや代入演算子でさえオブジェクトのコピーを許可するシングルトンデザインパターンがプライベートなのはなぜですか?

コンストラクターでオブジェクトをインスタンス化する場合のC ++クラスメンバースコープ

NSubstituteでプライベートセッターを使用してオブジェクトのインデクサーをモックする方法は?

オブジェクトコンストラクター内でマップ配列関数を使用する方法

javascriptのオブジェクトのコンストラクター内にonclickイベントを追加する

MOQオブジェクトのセットアップスコープ/コンテキストがビルダーパターンユニットテストとWebAPIコントローラーで失われる

MOQオブジェクトのセットアップスコープ/コンテキストがビルダーパターンユニットテストとWebAPIコントローラーで失われる

オブジェクト指向プログラムを作成して、オブジェクトとインターフェースをスーパークラス、サブクラス、インターフェースでインスタンス化する方法

オブジェクト指向プログラムを作成して、オブジェクトとインターフェースをスーパークラス、サブクラス、インターフェースでインスタンス化する方法

プライベートコンストラクタとデストラクタを持つクラスオブジェクトのベクトル?

C ++-別のクラスでプライベートコンストラクターを使用してオブジェクトをインスタンス化する方法

.net標準テストプロジェクトでプライベートオブジェクトをテストする方法は?

javascriptes6クラスコンストラクターでオブジェクトを宣言する方法

コンストラクターで実際のクラスオブジェクトの代わりにインターフェイスタイプのオブジェクトを使用する必要があるのはなぜですか

Serializableクラスのコンストラクターでオブジェクトを定義するには

(コピーコンストラクター)別のオブジェクトを初期化するためのパラメーターとして渡されたオブジェクトは、どのようにしてプライベートメンバーにアクセスできますか?

オブジェクト変数を別のクラスでプライベートにするには

2 つのオブジェクトをランダム コンストラクターで比較する方法

コンストラクターでJSONオブジェクトにアクセスする方法は?

TOP 一覧

  1. 1

    三項演算子良い練習の代わりとしてOptional.ofNullableを使用していますか?

  2. 2

    Spring Boot Filter is not getting invoked if remove @component in fitler class

  3. 3

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    ビュー用にサイズ変更した後の画像の高さと幅を取得する方法

  6. 6

    画像変更コードを実行してもボタンの画像が変更されない

  7. 7

    Three.js indexed BufferGeometry vs. InstancedBufferGeometry

  8. 8

    VisualStudioコードの特異点/ドッカー画像でPythonインタープリターを使用するにはどうすればよいですか?

  9. 9

    Python / SciPyのピーク検出アルゴリズム

  10. 10

    Ansibleで複数行のシェルスクリプトを実行する方法

  11. 11

    __init__。pyファイルの整理中に循環インポートエラーが発生しました

  12. 12

    二次導関数を数値計算するときの大きな誤差

  13. 13

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  14. 14

    androidsoongビルドシステムによるネイティブコードカバレッジ

  15. 15

    Reactでclsxを使用する方法

  16. 16

    値間の一致を見つける最も簡単な方法は何ですか

  17. 17

    Using Angular's UI-router, how can we make sure the new version of the html partial views are used, rather than the cached version?

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    PyTesseractを使用した背景色のため、スクリーンショットからテキストを読み取ることができません

  20. 20

    エンティティIDを含む@RequestBody属性をSpringの対応するエンティティに変換します

  21. 21

    How to access json value by key value in freemarker?

ホットタグ

アーカイブ