2015-09-30 7 views
0

Это метод под моим контроллером, который используется для создания фиктивных ключей для шифрования данных в приложении и сохранения их в ведро amazon s3.Тестирование модуля с использованием Moq

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()); 
     } 

Я получаю ошибку о неверном настройки. Есть ли способ разрешить эту ошибку?

+0

Можете ли вы предоставить сведения об ошибке? – Kamo

+0

Уверен, что это - Неверная настройка для не виртуального (переопределяемого в VB) члена: x => x.SaveMasterKeys ("ss", 1). –

ответ

0

Я думаю, что вы неправильно поняли, как издеваться над действием контроллера. Вы издеваетесь над этим, а затем сравниваете его с издеваемым контроллером. Это не путь (это как проверка ли true == true.

В основном эта ошибка означает, что Moq не может переопределить невиртуальный элемент (это само за себя). Вы должны изменить подпись метода, чтобы virtual, чтобы переопределение его

Но вы не должны издеваться над таким действием. Вместо этого вы должны издеваться над его зависимостями (сервисами, контекстами, шлюзами и т. Д.) И проверять, могут ли с известными входными значениями получать ожидаемые результаты без издевательства над самим действием.

+0

Спасибо. Я попробовал это, и я больше не получаю ошибку. –

+0

У меня также есть вопрос: можем ли мы издеваться над методом действий или нам нужен интерфейс или зависимость, чтобы насмехаться? –

+0

@rohitraina Как я уже упоминал - вы не должны издеваться над действиями, вы должны издеваться над своими зависимостями (в вашем случае «AWSS3File»). Вы можете перенести их в конструктор и поместить в поле. – Kamo

Смежные вопросы