Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9509

Moq で ref を持つメソッドの参照渡しの値をモック化する

$
0
0

概要

C# のモックライブラリ Moq を用いて ref を持つメソッドの参照渡しの値をモック化する方法になります。

参考情報

丁寧に解説されていたため、参考になりました。
https://dontcodetired.com/blog/post/Setting-Up-Mock-ref-Return-Values-in-Moq

解説

Moq の バージョン 4.8 以降にて、refパラメータに対する対応が実施されています。
その際、作成したモックにて参照渡しの値を設定するコードサンプルをメモとして残します。

/// <summary>/// テスト対象となるインターフェースです/// </summary>publicinterfaceITestTarget{voidDoSomething(stringvalue1,refstringvalue2);}/// <summary>/// コールバック用のデリデートを定義します/// </summary>/// <param name="value1"></param>/// <param name="value2"></param>delegatevoidDoSomethingCallback(stringvalue1,refstringvalue2);[TestClass]publicclassUnitTest{[TestMethod]publicvoidTestMethod(){// Arrangevarmock=newMock<ITestTarget>();// モックの振る舞いを登録します// ref参照の変数で値を変更しますmock.Setup(_=>_.DoSomething(It.IsAny<string>(),refIt.Ref<string>.IsAny)).Callback(newDoSomethingCallback((stringvalue1,refstringvalue2)=>value2="This is output value."));vartarget=mock.Object;// Actvarinput="This is input value.";target.DoSomething("",refinput);// AssertAssert.AreEqual("This is output value.",input);}}

まず、テスト対象メソッドが呼ばれた際のコールバック用のデリゲートを定義しておきます。
そして、Callbackにて ref に設定する変数を変更するように記載すれば OK です。


Viewing all articles
Browse latest Browse all 9509

Trending Articles