ASP.NET MVC: контроллеры Поблочного тестирования то использование UrlHelper

Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action на страницу анализа.

echo '<form action="parse-content-types.php" method="post">';
    echo '<input type="hidden" id="returnto" name="returnto" value="manage-content-types.php">';
    echo '<input type="hidden" id="action" name="action" value="add">';
      include('form-content-types.php');

    echo '<div class="row">';
        echo '<div class="col_12 center alpha omega">';
            echo '<input type="submit" class="button blue" value="Submit this Content Type">';
        echo '</div>';
    echo '</div>';

echo '</form>';

Это будет parse-content-types.php:

<?php
    $level = '../../';
    include($level.'core/ini/start.php');

    $returnto = 

Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action на страницу анализа.

[110]

Это будет parse-content-types.php:

[111]POST['returnto']; $action =

Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action на страницу анализа.

[110]

Это будет parse-content-types.php:

[111]POST['action']; $content_type_id =

Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action на страницу анализа.

[110]

Это будет parse-content-types.php:

[111]POST['content_type_id']; $content_type =

Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action на страницу анализа.

[110]

Это будет parse-content-types.php:

[111]POST['content_type']; $content_type_path =

Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action на страницу анализа.

[110]

Это будет parse-content-types.php:

[111]POST['content_type_path']; $content_type_desc =

Для этого в моем коде я просто добавляю скрытый ввод в форму, чтобы передать переменную $action на страницу анализа.

[110]

Это будет parse-content-types.php:

[111]POST['content_type_desc']; if($action == 'add'){ $insertq = $db->prepare('INSERT INTO content_types ( content_type, content_type_path, content_type_desc ) VALUES (?,?,?)'); $insertq->execute(array( $content_type, $content_type_path, $content_type_desc )); $msg = 's|The item: '.$content_type.' has been inserted into the Content Types Database Table.'; } elseif($action == 'edit'){ $sql = 'update content_types set content_type_id=:content_type_id, content_type=:content_type, content_type_path=:content_type_path, content_type_desc=:content_type_desc where content_type_id=:THEID'; $upd=$db->prepare($sql); $upd->bindParam(':content_type_id',$content_type_id,PDO::PARAM_STR); $upd->bindParam(':content_type',$content_type,PDO::PARAM_STR); $upd->bindParam(':content_type_path',$content_type_path,PDO::PARAM_STR); $upd->bindParam(':content_type_desc',$content_type_desc,PDO::PARAM_STR); $upd->bindParam(':THEID',$content_type_id,PDO::PARAM_STR); $upd->execute(); $msg = 's|The item: '.$content_type.' has been updated in the Content Types Database Table.'; } echo '<Script language="javascript">window.location="'.$returnto.'?msg='.$msg.'"</script>'; ?>
170
задан efdee 16 March 2011 в 13:57
поделиться

3 ответа

Вот один из моих тестов (xUnit + Moq) только для подобного случая (использующий URL. RouteUrl в контроллере)

Надеюсь, это поможет:

var routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);

var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
request.SetupGet(x => x.ApplicationPath).Returns("/");
request.SetupGet(x => x.Url).Returns(new Uri("http://localhost/a", UriKind.Absolute));
request.SetupGet(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection());

var response = new Mock<HttpResponseBase>(MockBehavior.Strict);
response.Setup(x => x.ApplyAppPathModifier("/post1")).Returns("http://localhost/post1");

var context = new Mock<HttpContextBase>(MockBehavior.Strict);
context.SetupGet(x => x.Request).Returns(request.Object);
context.SetupGet(x => x.Response).Returns(response.Object);

var controller = new LinkbackController(dbF.Object);
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
controller.Url = new UrlHelper(new RequestContext(context.Object, new RouteData()), routes);
202
ответ дан eu-ge-ne 23 November 2019 в 20:48
поделиться

Этот пост может быть полезен, если вы хотите издеваться над классом HttpContextBase.

http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx

12
ответ дан 23 November 2019 в 20:48
поделиться

Создание ответа @ eu-ge-ne, который мне очень помог:

У меня был ActionResult, который выполнял перенаправление, а также имел вызов UpdateModel с параметром FormCollection . Чтобы UpdateModel () заработал, мне пришлось добавить это в мою Mocked HttpRequestBase:

FormCollection collection = new FormCollection();
collection["KeyName"] = "KeyValue";

request.Setup(x => x.Form).Returns(collection);
request.Setup(x => x.QueryString).Returns(new NameValueCollection());

Чтобы проверить правильность перенаправленного URL, вы можете сделать следующее:

RedirectResult result = controller.ActionName(modelToSubmit, collection) as RedirectResult;
Assert.AreEqual("/Expected/URL", result.Url);
2
ответ дан 23 November 2019 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: