मैंइकाई परीक्षण में विफल रहता है
- http://effort.codeplex.com/ और
- एसक्यूएल सीई सर्वर (स्थानीय डीबी फ़ाइल)
http://www.codeproject.com/Articles/460175/Two-strategies-for-testing-Entity-Framework-Effort के साथ संयोजन में EF6 का उपयोग कर इकाई परीक्षण का मूल्यांकन कर रहा हूँ एक बहुत अच्छा संदर्भ था लेकिन अब मैं अटक गया हूँ।
मेरे पास 2 टेस्ट प्रोजेक्ट हैं (एक प्रयास के लिए और दूसरा एसक्यूएल सीई के लिए)। अगर मैं अलग-अलग दोनों को ठीक से चला रहा हूं। ReSharper परीक्षण धावक के साथ एक पंक्ति में दोनों चल रहा है अंतिम परीक्षण परियोजना हमेशा विफल रहता है। या तो
System.InvalidOperationException: इकाई की रूपरेखा पहले से ही एक DbConfiguration उदाहरण का उपयोग करते हुए एक प्रयास करने से पहले एक 'लोड' ईवेंट हैंडलर जोड़ने के लिए बनाया गया था। एंटीटी फ्रेमवर्क का उपयोग करने से पहले 'लोडेड' ईवेंट हैंडलर को केवल एप्लिकेशन के हिस्से के रूप में जोड़ा जा सकता है।
या
System.InvalidOperationException: डिफ़ॉल्ट DbConfiguration उदाहरण 'SqlCeConfiguration'.The' SqlCeConfiguration 'उदाहरण के उदाहरण स्थापित करने के लिए इकाई की रूपरेखा द्वारा इस्तेमाल किया गया था से पहले एक प्रयास किया गया था चाहिए किसी भी इकाई फ्रेमवर्क सुविधाओं का उपयोग करने से पहले एप्लिकेशन प्रारंभ पर सेट किया जाना चाहिए या एप्लिकेशन की कॉन्फ़िगरेशन फ़ाइल में पंजीकृत होना चाहिए।
यह हमेशा वही रहता है। उत्तराधिकारी पूर्ववर्ती से डीबी कॉन्फ़िगरेशन उदाहरण प्राप्त करता है। मैं साइड इफेक्ट्स के बिना टेस्ट प्रोजेक्ट/कॉन्फ़िगरेशन दोनों कैसे चला सकता हूं?
यहाँ मेरी DbContext वर्ग है:
public class DataContext : DbContext
{
public DataContext(string connectionString) : base(connectionString)
{ Configuration.LazyLoadingEnabled = false; }
public DataContext(DbConnection connection) : base(connection, true)
{ Configuration.LazyLoadingEnabled = false; }
}
है कि प्रयास के साथ परीक्षण स्थिरता:
[TestFixtureSetUp]
public void TestFixtureSetup()
{
EffortProviderConfiguration.RegisterProvider();
var connection = DbConnectionFactory.CreateTransient();
var dbContext = new DataContext(connection);
...
}
साथ एसक्यूएल सीई परीक्षण स्थिरता है कि:
[TestFixtureSetUp]
public void TestFixtureSetup()
{
const string filePath = @"LocalDb.sdf";
var connectionString = string.Format("Data Source={0}; Persist Security Info=False;", filePath);
DbConfiguration.SetConfiguration(new SqlCeConfiguration());
var dbContext = new DataContext(connectionString);
dbContext.Database.Create();
...
}
और मेरे SqlCeConfiguration:
public class SqlCeConfiguration : DbConfiguration
{
public SqlCeConfiguration()
{
SetProviderServices(SqlCeProviderServices.ProviderInvariantName, SqlCeProviderServices.Instance);
SetDefaultConnectionFactory(new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"));
}
}
बहुत बहुत शुक्रिया!
मार्सेल
'डीबी कॉन्फ़िगरेशन.सेट कॉन्फ़िगरेशन() 'विधि आम तौर पर प्रति ऐपडोमेन के एक' डीबी कॉन्फ़िगरेशन 'की अनुमति देती है। क्या आपने इसे कोड में सेट करने की कोशिश करने के बजाए प्रदाता को मैन्युअल रूप से कनेक्शन स्ट्रिंग में डालने का प्रयास किया है? –
@martin_costello संकेत के लिए धन्यवाद। दुर्भाग्यवश प्रदाता एक "समर्थित कीवर्ड नहीं है"। क्या आप एसक्यूएल सीई सर्वर के लिए एक उदाहरण कनेक्शन स्ट्रिंग प्रदान करते हैं? – Marcel
[यह भी देखें] (http://stackoverflow.com/questions/30730224/running-code-on-assembly-load-in-xunit/30730225) – AlexFoxGill