يمكن TransactionScope التراجع استخدامها مع السيلينيوم أو Watin؟
سؤال
وأنا أحاول القيام ببعض التجارب على شبكة الإنترنت الآلي التطبيق ASP.NET بلدي. وكنت آمل أن استخدام السمة AutoRollback من ملحقات Xunit.net إلى التراجع عن أي تغييرات قاعدة البيانات التي تم إجراؤها أثناء الاختبار. يستخدم AutoRollback TransactionScope لبدء معاملة قبل الاختبار ولفة مرة أخرى بعد ذلك.
وعندما كنت في محاولة لضرب تطبيق الويب الخاص بي أثناء إجراء معاملة، فإنه دائما انقضاء المهلة. يبدو مثل هذا يجب أن تعمل، أي أفكار؟ هنا هو اختبار لي:
[Fact]
[AutoRollback]
public void Entity_should_be_in_list()
{
Entity e = new Entity
{
Name = "Test",
};
dataContext.Entities.InsertOnSubmit(e);
dataContext.SubmitChanges();
selenium.Open("http://localhost/MyApp");
Assert.True(selenium.IsTextPresent("Test"));
}
المحلول
وتطبيق ASP.NET الخاص بك يحتوي على سياق قاعدة بيانات منفصلة وليس لديها أي فكرة أن كنت تريد أن انضمام المعاملة التي كتبها Xunit.net. على ما يبدو، بتأمين قاعدة بيانات بعض الموارد عندما تبدأ المعاملات؛ تطبيق ويب ينتظر بصبر لبعض الوقت، وفي النهاية يستسلم.
وأعتقد أن أفضل رهان هو أن تبدأ من قاعدة بيانات فارغة واستخدام البرنامج النصي SQL لإنشاء مخطط ونشر جداول البحث (قاعدة البيانات الخاصة بك هو <وأ href = "https://blog.codinghorror.com/get-your-database- تحت نسخة لمراقبة / "يختلط =" نوفولو noreferrer "> تحت السيطرة مصدر ، أليس كذلك؟). وثمة نهج آخر هو قاعدة بيانات النسخ الاحتياطي قبل تشغيل الاختبارات ومن ثم استعادته بمجرد الانتهاء.