0

可能重复:
Rhino Mocks 上的模拟和存根有什么区别?

我正在使用单元测试的模拟..但是我无法在实现代码中得到模拟和存根之间的区别..模拟实现代码是:-

[TestFixture]
    public class MockUser
    {
        [Test]
        public void SaveValidUserFileNameUsingMock()
        {
            UserMock um = new UserMock();
            um.uName = "";
            um.fName = "sfs.jpg";
            um.ContentType = "image/jpg";
            IUser usr = um;
            Assert.AreEqual("E:/image/kawade.jpg", usr.Save(um));
        }
    }

    public class UserMock : IUser
    {
        public string uName;
        public string fName;
        public string ContentType;

        public string Save(IUser u)
        {
            if (uName == "" || fName == "")
            {
                throw new ArgumentException("missing field name");
            }

            if (ContentType.Contains("image"))
            {
                string ext = Path.GetExtension(fName);
                return (string.Format("E:/image/{0}", this.uName + ext));
            }
            return "invalid";
        }
    }


        public interface IUser
        {
            string Save(IUser u);
        }

并且要测试的课程是:-

public class User
    {
        public string uName;
        public string fName;
        //private IUser usr;

        public void Save(FileUpload fu, User usr)
        {
            if (uName == null || fName == null)
            {
                throw new ArgumentException("missing field name");
            }

            if (fu.PostedFile.ContentType.Contains("image"))
            {
                string ext = Path.GetExtension(fName);
                fu.SaveAs(string.Format("E:/image{0}", this.fName + ext));
            }
        }

并且相同的类被用于存根测试。存根测试代码是:-

[TestFixture]
    public class UserTest
    {
        [Test]
        public void SaveUserValidFile()
        {
            UserStub su = new UserStub();
            su.uName = "kawade";
            su.fileName = "sfgs.png";
            su.Contenttype = "image/x-png";
            su.pName = "sdskjh";
            IUser target = su;

        }
    }

    internal class UserStub : IUser
    {
        public string uName;
        public string pName;
        public string Contenttype;
        public string fileName;


        public string Save(IUser u)
        {
            if (uName == null || pName == null)
            {
                throw new ArgumentException("user_name or pic_name is required");
            }

            if (Contenttype.Contains("image"))
            {
                string ext = Path.GetExtension(fileName);
                //return string.Format("C:/test/{0}", this.uName + ext);
                Assert.AreEqual("C:/Test/kawade.png", target.Save(su));
            }
            return "";
        }
    }

    public  interface IUser
    {
        string Save(IUser u);
    }

请有人告诉我存根和模拟之间的区别以及它在上面代码中的实现..

4

1 回答 1

1

存根:给你一个标准答案的东西,或者最多是属性包行为或方法,它们什么都不做,但必须返回 void。

假的:给你分阶段行为的东西,这样你就可以人为地测试该类客户端的一些场景。

模拟:可以编程以在不同时间给出不同响应的东西。它可以让您控制是否要检查调用的调用顺序。大多数模拟框架也为您提供存根功能。

以上每一个的部分变体:通过一个假的,一个人可以包装一个存根、另一个假、一个模拟或真正的实现,并且只为特定的参数做一些事情。

于 2011-04-26T08:06:32.540 回答