#c# #visual-studio #unit-testing
Вопрос:
У меня есть простое ASP.NET Приложение MVC было написано в VS2019. Мне нужно запустить модульные тесты для этого контроллера, но я не получаю ошибку с самого начала. Ранее я проводил тесты для примера HomeController
, и все прошло хорошо, теперь, когда я хочу повторить это, начинается лестница.
Мой контроллер:
namespace WebApplication.Controllers
{
public class BlobController : Controller
{
private readonly IBlobStorageRepository repo;
public BlobController(IBlobStorageRepository _repo)
{
this.repo = _repo;
}
public ActionResult Index()
{
var blobVM = repo.GetBlobs();
return View(blobVM);
}
public JsonResult RemoveBlob(string file, string extension)
{
bool isDeleted = repo.DeleteBlob(file, extension);
return Json(isDeleted, JsonRequestBehavior.AllowGet);
}
public async Task<ActionResult> DownloadBlob(string file, string extension)
{
bool isDownloaded = await repo.DownloadBlobAsync(file, extension);
return RedirectToAction("Index");
}
[HttpGet]
public ActionResult UploadBlob()
{
return View();
}
[HttpPost]
public ActionResult UploadBlob(HttpPostedFileBase uploadFileName)
{
bool isUploaded = repo.UploadBlob(uploadFileName);
if(isUploaded == true)
{
return RedirectToAction("Index");
}
return View();
}
}
}
Тест на один метод:
[TestClass]
public class BlobControllerTests
{
[TestMethod]
public void Index()
{
//Arrnage
BlobController controller = new BlobController();
//Act
ViewResult result = controller.Index() as ViewResu<
//Assert
Assert.IsNotNull(result);
}
}
Ошибка:
Для требуемого формального параметра «_repo»не было приведено никаких аргументов
Может ли кто-нибудь помочь мне с тестированием всего этого контроллера?
Я также хотел бы проверить представление, возможно ли это? Если да, то прошу конкретных советов.
Вид:
@model IEnumerable<WebApplication2.Models.BlobViewModel>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="container">
@Html.ActionLink("Upload to Azure Blob", "UploadBlob", new { controller = "Blob" }, new {@class = "btn btn-link"})
<div class="table table-striped table-responsive">
<table id="tablex">
<thead>
<tr>
<th>Container</th>
<th>Actual FileName</th>
<!--<th>Uri</th>-->
</tr>
</thead>
<tbody>
@if(Model != null)
{
foreach(var item in Model)
{
<tr id="row_@item.PrimaryUri">
<td>@item.BlobContainerName</td>
<td>@item.ActualFileName</td>
<!--
<td>
<a href=@item.PrimaryUri>@item.PrimaryUri </a>
</td>-->
<td>@Html.ActionLink("Download", "DownloadBlob", new { controller = "Blob", file = @item.FileNameWithoutExt, extension = @item.FileNameExtensionOnly }, new { @class = "btn btn-link" }) </td>
<td>
<input type="submit" href="#" class="btn btn-link" id="btndel" value="Remove" data-id="@item.ActualFileName" />
</td>
</tr>
}
}
</tbody>
</table>
</div>
</div>
@section scripts{
<script type="text/javascript">
debugger
$(document).ready(function () {
$('table tbody tr td input[type="submit"]').click(function () {
var fileName = $(this).attr("data-id")
var ext = fileName.split('.').pop();
var file = fileName.substr(0, fileName.lastIndexOf('.'));
var tr = $(this).closest('tr');
var msgx = confirm("are u sure to delete?");
if (msgx) {
$.ajax({
type: "post",
url: '@Url.Action("RemoveBlob", "Blob")',
data: { file: file, extension: ext },
success: function (response) {
if (response == true) {
tr.remove();
}
}
});
}
});
});
</script>
}
Комментарии:
1. Для тестирования вашего контроллера —
BlobController controller = new BlobController();
линии необходимо указатьIBlobStorageRepository
объект в качестве параметра. Вы, наверное, хотите посмеяться над этим.2. Я использую контроллер блобконтроллера = новый блобконтроллер(_repo: IBlobStorageRepository); и это неправильный тип
3. Вам нужно узнать о том, как издеваться над зависимостью для модульного тестирования
Ответ №1:
Попробуйте это
[TestClass]
public class BlobControllerTests
{
private Mock<IBlobStorageRepository> repo { get; set; } = new Mock<IBlobStorageRepository>();
[TestMethod]
public void Index()
{
// Arrange
BlobController controller = new BlobController(_repo: repo.Object);
// Act
ViewResult result = controller.Index() as ViewResu<
// Assert
Assert.IsNotNull(result);
}
}
Комментарии:
1. Это, работает! Не могли бы вы помочь мне с тестовым просмотром?