0

重複の可能性:
Rhino モックのモックとスタブの違いは何ですか?

私は単体テストのモックを使用しています..しかし、実装コードでモックとスタブの違いを得ることができません..モック実装コードは次のとおりです:-

[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 に答える