पर एनएचबीर्नेट के साथ परीक्षण करते समय यादृच्छिक त्रुटि मेरे पास एक प्रणाली है जो संदेश प्राप्त करने के बाद - इसे एक टेबल पर लिखती है, और एक और प्रक्रिया डीबी को प्रसंस्करण के लिए छोड़ देती है। मेरे स्वचालित परीक्षणों में मैंने एक ही प्रक्रिया में परिचालनों को विलय कर दिया है, लेकिन दो परिचालनों से एनएच सत्रों को विलय (अवधारणात्मक रूप से) नहीं कर सकता।एन-मेमोरी एसक्यूएलएट डीबी
स्वाभाविक रूप से - समस्याएं उत्पन्न होती हैं।
मैंने परीक्षण दुनिया में काम करने के लिए SQLite-InMemory-NHibernate संयोजन प्राप्त करने के बारे में सबकुछ पढ़ा है, लेकिन अब मैं "ऐसी कोई तालिका" त्रुटियों के कारण, RANDOMLY विफल परीक्षणों में भाग गया हूं। इसे स्पष्ट करने के लिए - "यादृच्छिक" का अर्थ है कि एक ही सटीक विन्यास और कोड के साथ एक ही परीक्षण कभी-कभी विफल हो जाएगा।
मैं निम्नलिखित SQLite विन्यास है:
return SQLiteConfiguration
.Standard
.ConnectionString(x => x.Is("Data Source=:memory:; Version=3; New=True; Pooling=True; Max Pool Size=1;"))
.Raw(NHibernate.Cfg.Environment.ReleaseConnections, "on_close");
अपने परीक्षण (हर परीक्षण) मैं "स्थिर" सत्र प्रदाता लाने की शुरुआत में, और कृपया यह पूछना मौजूदा डीबी साफ फ्लश, और पुनः बनाना स्कीमा:
public void PurgeDatabaseOrCreateNew()
{
using (var session = GetNewSession())
using (var tx = session.BeginTransaction())
{
PurgeDatabaseOrCreateNew(session);
tx.Commit();
}
}
private void PurgeDatabaseOrCreateNew(ISession session)
{
//http://ayende.com/Blog/archive/2009/04/28/nhibernate-unit-testing.aspx
new SchemaExport(_Configuration)
.Execute(false, true, false, session.Connection, null);
}
तो हाँ, यह एक अलग सत्र पर है, लेकिन कनेक्शन SQLite पर जमा है, इसलिए अगले सत्र मैं बनाने उत्पन्न स्कीमा देखेंगे। फिर भी, जबकि अधिकांश बार यह काम करता है - कभी-कभी बाद में "एनक्यू" ऑपरेशन विफल हो जाएगा क्योंकि यह मेरे आने वाले संदेशों के लिए एक टेबल नहीं देख सकता है। इसके अलावा - ऐसा लगता है कि प्रति परीक्षण सूट चलाने में अधिकतम एक या दो बार होता है; सभी परीक्षण विफल नहीं हो रहे हैं, केवल पहले (और कभी-कभी एक और। यह सुनिश्चित नहीं है कि यह दूसरा है या नहीं)।
सबसे बुरा हिस्सा यादृच्छिकता है, स्वाभाविक रूप से। मैंने खुद से कहा है कि मैंने इसे कई बार ठीक कर दिया है, सिर्फ इसलिए कि यह बस "विफल रहा बंद" है। बिना सोचे समझे।
यह FW4.0, System.Data.SQLite x86 संस्करण, Win7 64b और 2008R2 (कुल में तीन differen मशीन), एनएच 2.1.2, एफएनएच के साथ कॉन्फ़िगर किया गया है, TestDriven.NET 32b प्रीसेस और एनयूनिट कंसोल 32 बी प्रक्रियाओं पर ।
सहायता?
मुझे यह समस्या भी है। लगभग हर टेस्ट पास होता है, लेकिन एक बार में एक या दो परीक्षण "ऐसी कोई तालिका" त्रुटियों के साथ असफल हो जाएंगे, और यदि मैं उन्हें फिर से चलाता हूं, तो वे पास हो जाते हैं। मुझे लगता है कि यह सिर्फ SQLite कनेक्शन पूल में कनेक्शन को यादृच्छिक रूप से पुनर्निर्माण कर रहा है। –