4

次のような条件文があります。

//...
if(_view.VerifyData != true)
{
    //...
}
else
{
    _view.PermanentCancellation.Cancel();
}

ここで、PermanentCancellation は CancellationTokenSource 型です。

_view のモックでこれをどのように設定すればよいか疑問に思っています。これまでのすべての試みは失敗しました:(そして、Googleで例を見つけることができません。

任意のポインタをいただければ幸いです。

4

2 に答える 2

2

CancellationTokenSource.Cancelは仮想ではないため、moq でモックすることはできません。

次の 2 つのオプションがあります。

ラッパー インターフェイスを作成します。

public interface ICancellationTokenSource
{
    void Cancel();
}

およびラップされた CancellationTokenSource に委譲する実装

public class CancellationTokenSourceWrapper : ICancellationTokenSource
{
    private readonly CancellationTokenSource source;

    public CancellationTokenSourceWrapper(CancellationTokenSource source)
    {
        this.source = source;
    }

    public void Cancel() 
    {
        source.Cancel();
    }

}

そして、ICancellationTokenSourceasを使用して、テストでPermanentCancellationを作成できます。Mock<ICancellationTokenSource>

// arrange

var mockCancellationTokenSource = new Mock<ICancellationTokenSource>();
viewMock.SetupGet(m => m.PermanentCancellation)
        .Returns(mockCancellationTokenSource.Object)

// act

// do something

// assert

mockCancellationTokenSource.Verify(m => m.Cancel());

そしてCancellationTokenSourceWrapper、本番コードで使用します。

または、次のような非仮想メンバーのモックをサポートするモック フレームワークを使用します。

于 2012-09-04T13:29:38.477 に答える