سؤال

لقد تعثرت في هذا المشروع مفتوح المصدر وهمية سهلة, ، وعلي أن أعترف ، يبدو الأمر مثيرًا للاهتمام للغاية ، لكن لدي شكوك ، ما هو الفرق بين Fie Fakes وأقول Mok Mocks؟ هل أي شخص أفضل لاستخدامات معينة؟

تعديل:

ما هو حول هذا الإطار الجديد الذي سيجعله أفضل من قول موك؟

هل كانت مفيدة؟

المحلول

لكي أكون واضحًا ، لقد قمت بإنشاء Fakeiteasy لذا بالتأكيد لن أقول ما إذا كان أحد الإطار أفضل من الآخر ، ما يمكنني فعله هو الإشارة إلى بعض الاختلافات وتحفيز لماذا لقد خلقت المزيفة. من الناحية الوظيفية لا توجد اختلافات كبيرة بين MOQ و fakeiteasy.

لا يوجد لدى FakeIteasy "يمكن التحقق منه" أو "التوقعات" ، ومع ذلك ، فإن هذه التأكيدات هي دائمًا ما يتم ذكرها بشكل صريح في نهاية الاختبار ، وأعتقد أن هذا يجعل الاختبارات أسهل في القراءة والفهم. كما أنه يساعد المبتدئين على تجنب التأكيدات المتعددة (حيث سيحددون التوقعات على العديد من المكالمات أو الكائنات الوهمية).

لقد استخدمت وحيد القرن يسخر من قبل وأحببت ذلك تمامًا ، خاصة بعد تقديم AAA-Syntax ، لقد أحببت واجهة برمجة تطبيقات Fluent من MOQ بشكل أفضل. ما لم يعجبني مع MOQ هو "الكائن الوهمي" حيث يتعين عليك استخدام Mock.Object في كل مكان ، وأنا أحب نهج وحيد القرن مع "Natural" Mocks بشكل أفضل. كل مثيل يبدو ويشعر وكأنه مثيل عادي من النوع المزيف. أردت أفضل ما في العالمين وأردت أيضًا أن أرى ما يمكنني فعله مع بناء الجملة عندما كان لدي أيدي مجانية تمامًا. أنا شخصياً (من الواضح) أعتقد أنني خلقت شيئًا جيدًا مع الأفضل من كلا العالم ، لكن هذا أمر سهل للغاية عندما تقف على أكتاف العمالقة.

كما ذكرنا هنا أحد الاختلافات الرئيسية في المصطلحات ، تم إنشاء Fakeiteasy لأول مرة لإدخال TDD والسخرية للمبتدئين والحاجة إلى القلق بشأن الاختلافات بين السخرية والسكان في المقدمة (بالطريقة التي يجب عليك في وحيد القرن) هي ليست مفيدة جدا في رأيي.

لقد وضعت الكثير من التركيز في رسائل الاستثناء ، يجب أن يكون من السهل جدًا معرفة ما هو الخطأ في الاختبار الذي يبحث فقط عن رسالة استثناء.

لدى FakeIteasy بعض ميزات التوسيع التي لا تملكها الأطر الأخرى ولكنها لم يتم توثيقها جيدًا بعد.

FakeIteasy (نأمل) أقوى قليلاً في فصول السخرية التي لديها حجج مُنشأة لأنه لديها آلية لحل القيم الوهمية لاستخدامها. يمكنك حتى تحديد تعريفات القيمة الوهمية الخاصة بك عن طريق تنفيذ فئة DummyDefinition (من T) ضمن مشروع الاختبار الخاص بك ، وسيتم التقاط هذا تلقائيًا بواسطة FakeIteasy.

بناء الجملة هو اختلاف واضح ، وهو ما هو أفضل هو إلى حد كبير مسألة الذوق.

أنا متأكد من أن هناك الكثير من الاختلافات الأخرى التي أنسى الآن (ولكي أكون عادلاً ، لم أستخدم MOQ في الإنتاج بنفسي ، لذا فإن معرفتي بها محدودة) ، أعتقد أن هذه هي أهم الاختلافات.

نصائح أخرى

يمكن أن تكون المصطلحات المستخدمة في الاختبار مربكة بعض الشيء. أفضل مصدر يشرح الفرق بين المفاهيم المختلفة السخرية ليست كوب بقلم مارتن فاولر. باختصار، مزيف هو مصطلح عام يصف كل من كوبان وسخرات.

يمكن أن تكون المصطلحات في السخرية مربكة - وأحيانًا تكون غير بديهية تمامًا.

لذلك ، اقترح الكثير من الناس مصطلحات أبسط وجديدة ، حيث لديك فقط مزيفة, يسخر, ، و كعب.

مزيف هو المصطلح العام لجميع أنواع الزوجي المحتملة ، بغض النظر عن من أين أتوا وكيف يتم استخدامها.

أبعد من ذلك، مزيفة يتم تمييزها فقط على طول بعد واحد: سواء كانت تؤثر على نتائج الاختبار أم لا ؛ أو بعبارة أخرى: سواء كان عليك إعداد قيم الإرجاع للمواعيد ، والتي يتم استخدامها بطريقة أو بأخرى أثناء تنفيذ الاختبار ، أو أنها "صامتةالكائن الذي يعمل فقط على الوفاء ببعض التبعية.

كعب هذا هو "صامتة' هدف.

وهمية أنه يشارك بنشاط في تنفيذ الاختبار

علاوة على ذلك ، لا يوجد أي تمييز إضافي-والذي بالتأكيد له مزاياها التاريخية ، ولكنه أصبح الآن غير بديهي إلى حد كبير وأكاديمي ، وهو نوع من المفاهيم المهمة حقًا للتنمية التي تعتمد على الاختبار.

فيما يتعلق بالمقارنة بين مو و وهمية: الإطاران إلى حد كبير نفس الشيء من وجهة نظر مفاهيمية - الاختلافات هي فقط في API وفي المصطلحات...

توماس

من وجهة نظري ، لن يلغى MOC على سبيل المثال ، فأنا أستخدم Dev Magic Fake لطبقة DAL و Business Fay ، وفي نفس الوقت أستخدم Mock في MVC لـ HTTPContext

var repoistory = new FakeRepository<ProductTypeForm, VendorForm>();
            repoistory.Save(productTypeForm);
            this.FillDropDown(new FakeRepository<VendorForm>());

في الكود السابق ، سيقوم Dev Magic Fake بحفظ ProductTypeform واسترداد البائع من Dev Magic Fake وربطه بـ ProductTypeform

لمزيد من المعلومات حول Dev Magic Fake ، أراها على CodePlex:http://devmagicfake.codeplex.com

اختبار هذه الطريقة يجب أن نسخر من سياق HTTP

var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();

لذلك أنا أعمل مع وهمية وسخرية

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top