2

私は次のコントローラーを持っています:

public class ResetController : Controller
{
    //
    // GET: /Reset/
    private Models.ResetModel rm = new Models.ResetModel();

    public ActionResult Index()
    {
        //Check that this has a query string that is containing in the database 
        //and has been done in the last 30  mins.
        string qString = Request.QueryString["v"].ToString();            

        //if this is a good querystring
        if (rm.CheckQString(qString))
            return View();
        else
            return View("Index", "Home");
    } 

Request.QueryString 値がデータベースで見つかった場合に適切なビューが返されることを確認するために、単体テストを作成する必要がありますが、そうすることができません。これを確認するためのテストでの私の試みは次のとおりです。

[TestMethod()]
    public void IndexTest()
    {
        ResetController target = new ResetController();                           
        var request = new Mock<HttpRequestBase>();
        request.SetupGet(r => r.QueryString).Returns(HttpUtility.ParseQueryString("?v=0ocIqhOQkrBaCXRO96E4B5HcOCYgMfJYOpRdNU/yIEUmH2szuXXKU51Td6NzRxlk"));

        var result = target.Index() as ActionResult;
        Assert.IsNotNull(result);
    }  

このコントローラーが完全にテストされていることを確認するための提案を手伝ってもらえますか?

ありがとう

4

2 に答える 2

4

これは遅い答えですが、将来誰かがこの投稿に出くわした場合に備えて... この投稿を参照してくださいどうすればクエリ文字列をモックできますか

目標は、データベースからの QueryString の結果ではなく、提供された値に依存しないように、テストを分離することです。Moq でこれを行うには、モック コンテキストを作成した後に SetupGet メソッドを使用します。これが誰かを助けることを願っています!

于 2013-06-25T19:06:20.630 に答える