public async Task BasicMock()
        {
            // モックオブジェクトを生成
            var     targetMock = new Mock <ITarget>();
            ITarget target     = targetMock.Object;

            // モック化対象のオブジェクトを直接取得も可
            //ITarget target = Mock.Of<ITarget>();

            // 特定引数に対して固定値を返却するモック
            // モック対象: public int Add(int x, int y)
            targetMock.Setup(o => o.Add(1, 2)).Returns(3);
            // テスト
            Assert.Equal(3, target.Add(1, 2));
            Assert.Equal(0, target.Add(9, 9)); // 引数不一致の場合は既定値になる

            // 特定引数に対して固定値を返却するモック(非同期)
            // モック対象: public Task<int> AddAsync(int x, int y)
            targetMock.Setup(o => o.AddAsync(1, 2)).ReturnsAsync(3);
            // テスト
            Assert.Equal(3, await target.AddAsync(1, 2));
            Assert.Equal(0, await target.AddAsync(9, 9)); // 引数不一致の場合は既定値になる

            // 任意引数に対して固定値を返却するモック
            // モック対象: public bool Send(string message)
            targetMock.Setup(o => o.Send(It.IsAny <string>())).Returns(true);
            // テスト
            Assert.True(target.Send("abc"));
            Assert.True(target.Send("12345"));
        }