最近项目经理让写单元测试,以前没有写过不知道怎么写,也看了一些网上的资料的,还是有一点模糊,请各位高手指点一下谢谢啦!一个最简单的类怎么测试
my Controllers:
 [AuthenticationFilter]
    public class AssignRoleController : Controller
    {
        // GET: /AssignRole/
        /*展示出用户权限*/
        public ActionResult Index(string loginname)
        {
           // Guid UserID;
            ViewData["UserID"] = loginname.ToString();
            ViewData["MessageBox"] = "";
            if (loginname == null)
            {
                ViewData["UserID"] = "10329527-1001-1001-1001-012345678910";
            }
            return View("AssignRole");
        }
}自动生成的如下:不知道应该怎么改了
 ///</summary>
    [TestClass()]
    public class AssignRoleControllerTest
    {
        private TestContext testContextInstance;        /// <summary>
        ///获取或设置测试上下文,上下文提供
        ///有关当前测试运行及其功能的信息。
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }        #region 附加测试属性
        // 
        //编写测试时,还可使用以下属性:
        //
        //使用 ClassInitialize 在运行类中的第一个测试前先运行代码
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext)
        //{
        //}
        //
        //使用 ClassCleanup 在运行完类中的所有测试后再运行代码
        //[ClassCleanup()]
        //public static void MyClassCleanup()
        //{
        //}
        //
        //使用 TestInitialize 在运行每个测试前先运行代码
        //[TestInitialize()]
        //public void MyTestInitialize()
        //{
        //}
        //
        //使用 TestCleanup 在运行完每个测试后运行代码
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        //
        #endregion
        /// <summary>
        ///Index 的测试
        ///</summary>
        // TODO: 确保 UrlToTest 属性指定一个指向 ASP.NET 页的 URL(例如,
        // http://.../Default.aspx)。这对于在 Web 服务器上执行单元测试是必需的,
        //无论要测试页、Web 服务还是 WCF 服务都是如此。
        [TestMethod()]
        [HostType("ASP.NET")]
        [AspNetDevelopmentServerHost("%PathToWebRoot%\\Touch.Web", "/")]
        [UrlToTest("http://localhost:18608/")]
        public void IndexTest()
        {
            AssignRoleController target = new AssignRoleController(); // TODO: 初始化为适当的值
            string loginname = ; // TODO: 初始化为适当的值
            ActionResult expected =; // TODO: 初始化为适当的值
            ActionResult actual;
            actual = target.Index(loginname);
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("验证此测试方法的正确性。");
        }
}

解决方案 »

  1.   

    Assert.AreEqual(expected, actual); 一个是期望值一个是实测值
    如果2个结果一样  自动测试就会认为这个测试通过  运行起来就是绿点
      

  2.   

    麻烦你补充完整代码好吗?
    单元测试中常用的“断言方法”:
    Assert.AreEqual() 测试指定的值是否相等,如果相等,则测试通过;
    Assert.Inconclusive() 表示一个未验证的测试;
    Assert.IsTrue() 测试指定的条件是否为True,如果为True,则测试通过;
    Assert.IsFalse() 测试指定的条件是否为False,如果为False,则测试通过;
    Assert.IsNull() 测试指定的对象是否为空引用,如果为空,则测试通过;
    Assert.IsNotNull() 测试指定的对象是否为非空,如果不为空,则测试通过;
    这个我知道的。
      

  3.   

    没有人回答,现在我通过moq 这个类库使用mock来模拟Controller中的上下文。现在想不通怎么模拟里面的方法。比如HttpContext.ViewData.Cookes.Add()这个方法。我看过一个论坛里面有对HttpContext.ViewData.End()
    方法的模拟。但是对以上的方法我还是不能想出来是怎么模拟的。请高手什么帮助回复一下,或是哪里有相关的知识给提示一下。