كيف تقوم وحدة الأشخاص باختبار التعليمات البرمجية التي تستخدم Linq إلى SQL

StackOverflow https://stackoverflow.com/questions/52657

  •  09-06-2019
  •  | 
  •  

سؤال

كيف يتم اختبار وحدة الأشخاص للتعليمات البرمجية التي تستخدم Linq إلى SQL؟

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

المحلول

تحديث:

لقد وضع فريدريك حلاً نموذجيًا لكيفية إجراء اختبار الوحدة لتطبيقات linq2sql في مدونته.يمكنك تنزيله على:

http://web.archive.org/web/20120415022448/http://iridescent.no/post/DataContext-Repository-Pattern-Example-Code.aspx

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

مشاركتي القديمة:

*لقد وجدت هذه المدونات التي أعتقد أنها بداية جيدة لإنشاء غلاف DataContext:الرابط1 الرابط2

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

نصائح أخرى

لقد تأخرت 3 سنوات، ولكن هذه هي الطريقة التي أفعل بها ذلك:

https://github.com/lukesampson/LinqToSQL-test-extensions/

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

  1. واجهة لسياق البيانات الخاصة بك على سبيل المثال.IExampleDataContext
  2. محاكاة في الذاكرة لسياق البيانات الخاصة بك، على سبيل المثال.MemoryExampleDataContext

سيستخدم كلاهما تلقائيًا التعيينات التي قمت بتكوينها بالفعل في DBML الخاص بك.

لذلك يمكنك أن تفعل أشياء مثل

public class ProductRepo {
    IExampleDataContext DB { get; set };
    public ProductRepo(IExampleDataContext db) {
        DB = db;
    }

    public List<Product> GetProducts() {
        return DB.Products.ToList();
    }
}

ويمكنك استدعاء ذلك مع أي منهما

new ProductRepo(new MemoryExampleDataContext()).GetProducts(); // for testing

أو

new ProductRepo(new ExampleDataContext()).GetProducts(); // use the real DB

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

Linq يجعل الاختبار أسهل بكثير.تعمل استعلامات Linq أيضًا على القوائم كما هو الحال في عناصر Linq-to-sql.يمكنك تبديل Linq إلى SQL لكائنات القائمة واختبارها بهذه الطريقة.

ماتوار في سجل الويب الضال كان لديه مقالة رائعة حول كيفية محاكاة سياق بيانات Linq2Sql القابل للتوسيع.تحقق من ذلك -- MOCKS NIX - رابط قابل للتوسيع لنص بيانات SQL

عادةً، لا تحتاج إلى اختبار جزء من التعليمات البرمجية الذي يستخدم LINQ إلى SQL، ولكن إذا كنت تريد ذلك حقًا، فيمكنك استخدام نفس مجموعات البيانات التي تستعلم عنها على الخادم وتحويلها إلى كائنات في الذاكرة و قم بتشغيل استعلامات LINQ مقابل ذلك (والذي قد يستخدم الأساليب Enumerable بدلاً من Queryable).

خيار آخر هو استخدام مات وارين نسخة وهمية من DataContext.

يمكنك أيضًا الحصول على عبارات SQL التي يستخدمها LINQ to SQL عن طريق الحصول عليها عبر مصحح الأخطاء (من كائن IQueryable)، والتحقق منها يدويًا، ثم تضمينها في الاختبارات الآلية.

يعد LINQ to SQL أمرًا رائعًا حقًا لاختبار الوحدة لأنه يتمتع بالقدرة على إنشاء قواعد بيانات بسرعة مما تم تعريفه في DBML الخاص بك.

إنه يجعل من الجيد حقًا اختبار طبقة ORM عن طريق إنشاء قاعدة البيانات من خلال DataContext وجعلها فارغة في البداية.

أغطيها في مدونتي هنا: http://web.archive.org/web/20090526231317/http://www.aaron-powell.com/blog/may-2008/unit-testing-linq-to-sql.aspx

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