Exemplo n.º 1
0
        public void Test1()
        {
            using (var mocker = AutoMock.GetStrict())
            {
                mocker.VerifyAll = true;
                var mahuaApi = mocker.Mock <IMahuaApi>();
                var msgSend  = false;
                mahuaApi
                .Setup(x => x.SendPrivateMessage("472158246", "请马上捐款"))
                .Callback <string, string>((qq, msg) =>
                {
                    _testOutputHelper.WriteLine($"测试将消息发送给{qq},消息是{msg}");
                    msgSend = true;
                });

                // 这里使用的是V2
                IPrivateMessageFromFriendReceivedMahuaEvent @event =
                    mocker.Create <PrivateMessageFromFriendReceivedMahuaEventV2>();
                @event.ProcessFriendMessage(new PrivateMessageFromFriendReceivedContext
                {
                    FromQq   = "472158246",
                    Message  = "请马上捐款收到回复",
                    SendTime = DateTime.Now
                });

                // 注意,这里是true
                msgSend.Should().BeTrue();
            }
        }
Exemplo n.º 2
0
        public void Test()
        {
            // 一般的单元测试都分为三个部分 Arrange(准备) Action(执行) 和 Assert(断言)
            // Arrange 对单元测试中需要测试的准备参数进行初始化
            // Action 执行需要测试的逻辑
            // Assert 对测试结果是否正确进行判断
            using (var mocker = AutoMock.GetStrict())
            {
                // Moq的参数,确定在整个单元测试结束之后,所有被模拟的方法都已经被执行。
                mocker.VerifyAll = true;

                #region Arrange

                // 生成一个IMahuaApi的实现,这个实现的所有方法都是没有实现的,需要进一步填充
                var mahuaApi = mocker.Mock <IMahuaApi>();

                // 用来记录消息是否已经发送的变量,为了在断言中使用
                var msgSend = false;

                // 对MahuaApi中的SendPrivateMessage方法进行模拟
                // 当调用参数是“472158246”和“呵呵哒”时,调用xunit帮助类在控制台输出消息
                // 并设置变量msgSend为true  表示,消息确实已经回发了
                mahuaApi
                .Setup(x => x.SendPrivateMessage("472158246", "呵呵哒"))
                .Callback <string, string>((qq, msg) =>
                {
                    _testOutputHelper.WriteLine($"测试将消息发送给{qq},消息是{msg}");
                    msgSend = true;
                });

                #endregion

                #region Action

                //创建需要测试的类,由于使用了Autofac.Extras.Moq,构造函数注入的过程会自动执行
                IPrivateMessageFromFriendReceivedMahuaEvent @event =
                    mocker.Create <PrivateMessageFromFriendReceivedMahuaEvent>();

                // 模拟某人向机器人发送了消息
                @event.ProcessFriendMessage(new PrivateMessageFromFriendReceivedContext
                {
                    FromQq   = "472158246",
                    Message  = "呵呵哒",
                    SendTime = DateTime.Now
                });

                #endregion

                #region Assert

                // 根据这个变量判断 机器人是否成功回发了消息
                msgSend.Should().BeTrue();

                #endregion
            }
        }
Exemplo n.º 3
0
        public void Test2()
        {
            using (var mocker = AutoMock.GetStrict())
            {
                mocker.VerifyAll = true;

                // 因为我们确定不会调用IMahuaApi,所以不需要Mock

                // 这里使用的是V2
                IPrivateMessageFromFriendReceivedMahuaEvent @event =
                    mocker.Create <PrivateMessageFromFriendReceivedMahuaEventV2>();
                @event.ProcessFriendMessage(new PrivateMessageFromFriendReceivedContext
                {
                    FromQq   = "472158246",
                    Message  = "呵呵哒",
                    SendTime = DateTime.Now
                });
            }
        }