2016-11-05 60 views
0

我有以下asp.net頁面Contact且是具有一個方法,我想編寫一個單元測試用例該方法TestHandlerDemoClass但是當我試圖用它它MSTest project像拋出 Request not available in this context如何模擬ASP.Net WebForm頁面的請求?

public partial class Contact : Page 
    { 

    } 
public class TestHandlerDemoClass 
    { 
public void MyTestMethod(Page mypage) 
     { 
     string id= mypage.Request["EntityId"] 

//here I'm not getting Request inside mypage 

例外,我測試項目代碼 -

[TestClass] 
    public class UnitTest1 
    { 
     [TestMethod] 
     public void NullCheck() 
     { 
      try 
      { 
       Contact contactPage = new Contact(); 
       TestHandlerDemoClass mydemo = new TestHandlerDemoClass(); 
       mydemo.MyTestMethod(contactPage); 
      } 
      catch (Exception ex) 
      { 
       Assert.AreEqual(ex.Message, "Id not found"); 
      } 
     } 
    } 

在這裏上述前我得到消息像{"Request is not available in this context"}

我只是試圖寫單元測試用例方法`

public void MyTestMethod(Page mypage) 

這需要Page mypage作爲參數。

該怎麼辦?

回答

1

通過嘲笑你Contact類測試將通過,問題是大多數單元測試工具不允許模擬非虛擬類。 即時通訊使用Typemock其中它可能嘲笑幾乎任何類型的對象,而無需更改您的代碼,以及它真的願意使用。

例如:

[TestMethod] 
     public void NullCheck() 
     { 
      try 
      { 
       var contactPage = Isolate.Fake.Instance<Contact>(); 
       TestHandlerDemoClass t = new TestHandlerDemoClass(); 
       t.MyTestMethod(contactPage); 
      } 
      catch (Exception ex) 
      { 
       Assert.AreEqual(ex.Message, "Id not found"); 
      } 
     } 
+0

如何以及在何處分配請求值'EntityId'? – Neo

0

我不是在單元測試方面的專家,但我認爲你應該通過模擬對象想在這裏回答:How to mock the Request on Controller in ASP.Net MVC?

+0

我得到了你的觀點感謝,但不是嘲笑它會更簡單,如果我知道了如何通過從單元測試方法 – Neo

+0

的[HttpRequest對象(HTTPS頁面請求://msdn.microsoft.com/it-it/library/system.web.httprequest(v = vs.110).aspx)是相當複雜的東西,那是從一個能夠發送http請求(通常是瀏覽器)。我懷疑你可以找到比模擬簡單的東西 –

+0

如何嘲笑asp.net而不是控制器,因爲我的方法有頁面作爲輸入? – Neo