如何模拟ASP.Net WebForm页面的请求?

时间:2016-11-05 10:09:42

标签: c# asp.net unit-testing mstest

我有以下asp.net页面Contact并且TestHandlerDemoClass有一个方法我想为该方法编写单元测试用例但是当我使用MSTest project尝试它时抛出异常就像 Request not available in this context

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为参数。

怎么做?

2 个答案:

答案 0 :(得分: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");
            }
        }

答案 1 :(得分:0)

我不是单元测试方面的专家,但我认为你应该传递一个模拟对象,如下所示:How to mock the Request on Controller in ASP.Net MVC?