使用Moq进行单元测试

罗希特·雷纳(Rohit Raina)

这是在我的控制器下的一种方法,该方法用于创建虚拟密钥以对应用程序中的数据进行加密并将其存储在Amazon s3存储桶中。

public JsonResult SaveMasterKeys(string MekText, int Thismek)
        {
            string folderName = string.Empty, fileName = string.Empty;
            List<string> folderNameList = new List<string>();
            folderNameList.Add("Guard1");
            folderNameList.Add("Guard2");
            try
            {
                if (Thismek == 1)
                {
                    folderName = "Guard1";
                    fileName = "NewMek1.key";
                }
                else
                {
                    folderName = "Guard2";
                    fileName = "NewMek2.key";
                }
                AWSS3File aws = new AWSS3File();

                //aws.BucketExist(filePath);
                //aws.CreateFile(MekText, filePath);
                // Check Weather the Folder is exist or not

                if (!aws.CheckFolderExist(folderName))
                {
                    foreach (var item in folderNameList)
                    {
                        aws.CreateFolder(item);
                        if (item == "Guard1")
                        {
                            aws.CreateFileIntoS3((item == folderName ? MekText : ""), item, "NewMek1.key");
                            aws.CreateFileIntoS3("", item, "Mek1.key");
                        }
                        else
                        {
                            aws.CreateFileIntoS3((item == folderName ? MekText : ""), item, "NewMek2.key");
                            aws.CreateFileIntoS3("", item, "Mek2.key");
                        }
                    }
                }
                else
                {
                    aws.CreateFileIntoS3(MekText, folderName, fileName);
                }
                ViewData["SaveMessage"] = "Saved successfully.";
            }
            catch (Exception ex)
            {
                XTP.Logger.LogCritical("XTP.Web.internaltools", ex.ToString());
                ViewData["SaveMessage"] = "Keys not updated successfully.";
            }
            return Json(new { success = true, value = ViewData["SaveMessage"] }, JsonRequestBehavior.AllowGet);
        }

这是我为同一本书写的TESTMETHOD

[TestMethod]
        public void MockAlways()
        {
            var mock = new Mock<AccountController>();
            JsonResult json = new JsonResult();
            //new { success = true, value = ViewData["SaveMessage"] }, JsonRequestBehavior.AllowGet
            json.Data = new { success = true, value = "sa" };
            json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;


            mock.Setup(x => x.SaveMasterKeys("ss", 1)).Returns(json);

            var controller = new AccountController();
            var result = controller.SaveMasterKeys("ss", 1) as JsonResult;

            Assert.AreEqual(mock.Object.SaveMasterKeys("ssxs", 1), result.Data.ToString());
        }

我收到无效的安装错误。有没有办法解决此错误?

卡米氏菌

我认为您误解了如何模拟控制器的动作。您正在模拟它,然后将其与模拟的控制器进行比较。这不是可行的方法(就像检查是否为true == true

基本上,此错误意味着Moq无法覆盖非虚拟成员(这是不言自明的)。您应该将方法的签名更改virtual为允许覆盖它。

但是-您不应该嘲笑这样的动作。相反,您应该模拟其依赖项(服务,上下文,网关等),并检查是否可以在不模拟动作本身的情况下使用已知的输入值获得预期的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

模仿ViewModel进行Moq进行单元测试?

使用Moq对通用工作单元和存储库模式框架进行单元测试

使用Moq进行单元测试的工作单元和通用存储库模式框架

在使用Moq和AutoFixture进行单元测试API时模拟HttpResponseMessage

使用Moq .net Core进行单元测试文件上传

如何使用Moq对在.NET中使用asmx服务的应用程序进行单元测试

如何使用Entity Framework和Moq进行单元测试?

使用MOQ嵌套类和接口C#进行单元测试

使用moq通用存储库和UnitOfWork进行单元测试

使用Moq进行WCF服务的单元测试

在Xamarin中使用Moq进行NUnit单元测试

使用Moq和xUnit对服务进行单元测试

如何使用Moq Azure Key Vault进行单元测试

使用Moq的单元测试cosmosDb方法

如何使用Moq对.NET Core 3.1中的LoggerMessage.Define()进行单元测试?

在Visual Studio 2012中使用Moq进行单元测试

如何使用Moq对Service Stacks Redis Client进行单元测试

如何使用在方法中具有依赖项的moq来对类进行单元测试?

使用Moq安排单元测试

使用Moq对MVC6中的控制器路由功能进行单元测试

使用Moq和Autofac进行单元测试

单元测试-如何使用MOQ进行MOQ WCF客户端

使用 Moq 框架进行单元测试

使用在 Task.Run 内调用的 Moq 方法进行单元测试

使用 Moq 和接口进行单元测试

使用 xunit 和 moq 进行 net core api 控制器单元测试

通过在 C# 中使用 Moq 模拟外部 DLL 进行单元测试

如何使用 Moq 对 WEB API 控制器异常进行单元测试

使用 moq 对 Web API 控制器 actualResult 进行单元测试的行为与预期不符