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();
}
}
そして、ICancellationTokenSource
asを使用して、テストで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
、本番コードで使用します。
または、次のような非仮想メンバーのモックをサポートするモック フレームワークを使用します。