سؤال

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

هل هذا مقبول؟هل يجب أن أكشف عن القاعدة من خلال إحدى الطرق ثم أتصل بهذه الطريقة من الكود والاختبار الخاص بي للتأكد من أن اختبار الوحدة ليس هشًا للغاية؟

سؤالي هو:ما هي الطريقة الصحيحة لاختبار الوحدة لقواعد العمل التي قد تتغير؟

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

المحلول

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

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

وأنت أيضا لا تريد اختبار لأن يقترن إلى بيانات محددة، إما. يقول عند القيام حساب الضريبة، واختبار لا ينبغي أن تكون مكتوبة لنفترض أن الطبقة تحت الاختبار يستخدم 5٪ والضرائب. بدلا من ذلك، يجب أن تكتب الاختبار بحيث تزود نسبة الضريبة، ومن ثم يتحقق أن يتم حساب بشكل صحيح. ومن المفترض، سيكون لديك مجموعة من القيم لاختبار للتأكد من أن من قيم مجموعة يتم القبض أيضا. واحد نتيجة لذلك هو أن سيكون لديك تصميم أفضل لأن ذلك سوف تساعدك على تجنب القيم الثابت تلوينها وجعل رمز الإنتاج أكثر مرونة للتغيرات في البيانات.

نصائح أخرى

ولدي الإعداد مماثل - ولكن يتم تجميع قواعد عملي ولكن لديها خيارات شكلي (لك قد تختلف). عندما تتغير قاعدة عمل وسيلة الأساسية التي تعمل فيها، يا وحدة الاختبارات كسر. ومن المتوقع لهذا الواقع - وجيد! وهو ما يعني أن أستطيع أن عزل أي تموجات غير متوقعة في جميع أنحاء نظام بلدي وتحديث الاختبارات لتتناسب مع التغييرات.

إذا القواعد الخاصة بك هي الخارجية (نوع من لغة البرمجة النصية أو sproc قاعدة البيانات) فإنك سوف تحتاج للالتفاف عليها في اختبار التكامل وسلك يصل اختبارات عملية التكامل لتنفيذ الآلية. في حين لم تعد وحدة الاختبار، الاختبارات التكامل مهمة إلى حد ما أيضا، وسوف تساعدك في نفس الطريق وحدة الاختبارات لمنع تموجات غير متوقعة بسبب تغيير قاعدة العمل.

وهذا يبدو وكأنه لديك قواعد العمل، ثم لديك عملاء لتلك القواعد التجارية. إذا هذين يمكن أن تختلف بشكل مستقل، قد يكون من الحكمة لتصميم API وفقا لذلك.

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

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

عند الانتهاء تماما مع الاستراتيجية الجديدة، يمكنك استبدال استراتيجية في العميل.

عند وحدة اختبار العميل، يجب عليك أن تفعل ذلك ضد استراتيجية مزدوجة اختبار (مثل همية أو العقب) للتحقق من أن العميل يتفاعل بشكل صحيح مع استراتيجية دون الاعتماد على أي تنفيذ استراتيجية معينة.

في هذه الطريقة، يمكنك الحصول على فصل نظيف من المخاوف وعليك أن تبقي الاختبارات وحدتك للصيانة. يمكنك أيضا الانصياع لفتح / مغلقة المبدأ.

ويبدو الصحيح الذي فشل اختبار إذا تم تغيير قواعد - وهذا أمر متوقع

.

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

وبطبيعة الحال، وهذا يعتمد بشكل كبير على نوع من المنطق تختبره، وربما لا تكون دائما قابلة للتطبيق.

أعتقد أنها قاعدة عمل غير صحيحة واختبار الوحدة في مستويات تجريد مختلفة.توجد قاعدة العمل في المستوى الأعلى من التجريد (نمذجة الأعمال) ولكن اختبار الوحدة مخصص لاختبار وحدة من التعليمات البرمجية الموجودة في أدنى مستوى من التجريد. لا يمكنك استخدام اختبار الوحدة للتحقق من صحة قاعدة العمل أو التحقق منها.بالإضافة إلى ذلك، قد تؤثر قاعدة العمل بعد التحليل والتصميم على عدة وحدات من الأكواد، لذا مرة أخرى أنت لا يمكن استخدام اختبار الوحدة للتحقق من صحة قاعدة العمل أو التحقق منها.أعتقد أنه يمكنك استخدام حالة الاختبار أو سيناريو BDD للتحقق من صحة قاعدة العمل والتحقق منها.

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