2011-02-22 22 views
3

現在、TryUpdateModel()を使用する挿入メソッドをテストしようとしています。私は必要なcontrollercontextを偽っていますが、それは動作しますが、セットアップしたモデルをポストしているようには見えません。TryUpdateModel()をMStestとmoqでテストする

[AcceptVerbs(HttpVerbs.Post)] 
    [GridAction] 
    public ActionResult _SaveAjaxEditing(int? id) 
    { 
     if (id == null) 
     { 
      Product product = new Product(); 
      if (TryUpdateModel(product)) 
      { 
       //The model is valid - insert the product. 
       productsRepository.Insert(product);// AddToProducts(product); 
      } 
     } 
     else 
     { 
      var recordToUpdate = productsRepository.Products.First(m => m.ProductID == id); 
      TryUpdateModel(recordToUpdate); 
     } 
     productsRepository.Save(); 
     return View(new GridModel(productsRepository.Products.ToList())); 
    } 

そして、ここでは私の現在のテストです:

 [TestMethod] 
    public void HomeControllerInsert_ValidProduct_CallsInsertForProducts() 
    { 
     //Arrange 
     InitaliseRepository(); 

     var httpContext = CustomMockHelpers.FakeHttpContext(); 
     var context = new ControllerContext(new RequestContext(httpContext, new RouteData()), controller); 
     controller.ControllerContext = context; 
     //controller.ControllerContext = new ControllerContext(); 

     var request = Mock.Get(controller.Request); 
     request.Setup(r => r.Form).Returns(delegate() 
               { 
                var prod = new NameValueCollection 
                    { 
                     {"ProductID", "9999"}, 
                     {"Name", "Product Test"}, 
                     {"Price", "1234"}, 
                     {"SubCatID", "2"} 
                    }; 
                return prod; 
               }); 


     // Act: ... when the user tries to delete that product 
     controller._SaveAjaxEditing(null); 
     //Assert 
     _mockProductsRepository.Verify(x => x.Insert(It.IsAny<Product>())); 
    } 

メソッドが呼び出されているが、それは(TryUpdateModelために取得する場合)、それはそれはできないようだ。ここ

は、私がテストしてい方法であり、投稿されたオブジェクトをピックアップする。私が間違っている場所のポインタはすばらしいでしょう。

答えて

6

ソート済みです。完全にHttpcontockを嘲笑しているようだが、残酷だった。

controller.ControllerContext = new ControllerContext(); 

var prod = new FormCollection 
      { 
       {"ProductID", "1"}, 
       {"Name", "Product Test"}, 
       {"Price", "1234"}, 
       {"SubCatID", "2"} 
      }; 

controller.ValueProvider = prod.ToValueProvider(); 

これはトリックです。これは現在転記されています。

関連する問題