फ़ेकेबल फ़ंक्शन सामान्य पर पुन: असाइन नहीं किया गया था। मेरे सभी टेबल जो मैंने फ़ैकेट करने योग्य उपयोग किए हैं, अब यूनिट परीक्षण के सम्मिलन में उपयोग किए जाने वाले मानों की सामग्री शामिल हैं। यह कई टेबल था और उसने अपना डेटाबेस बेकार छोड़ दिया है। कृपया इस समस्या या कम से कम इसके कारण को हल करने में मदद करें। यह मुझे हमारे सीआई तैनाती प्रक्रिया में इसका उपयोग करने और हमारे स्थानीय विकास प्रयासों में शायद अधिक महत्वपूर्ण रूप से उपयोग करने के बारे में बहुत परेशान करता है।जब मैं tSQLt faketable तालिका मैपिंग रीसेट नहीं करता है तो मैं कैसे पुनर्प्राप्त करूं?
उत्तर
यह आपके परीक्षणों या आपके कोड में से एक है, एक ऐसे राज्य में लेनदेन छोड़ दिया जहां इसे वापस नहीं किया जा सका। आमतौर पर परिणाम में "त्रुटि" ("सफलता" या "विफलता" के बजाय) के साथ एक या अधिक परीक्षण देखने में परिणाम होता है।
इन मामलों में, FakeTable ऑपरेशन वापस लुढ़का नहीं है, और टेबल को उनके पके हुए राज्य में छोड़ दिया गया है।
कवर के तहत, FakeTable तालिका का नाम बदलता है और इसकी एक नई प्रति बनाता है। जब नाम होता है, तो ऑपरेशन tSQLt.Private_RenamedObjectLog में लॉग होता है।
उदाहरण के लिए, आप एक त्रुटि है कि tSQLt शान से वापस नहीं किया जा सकता है पुन: पेश करने के लिए निम्न कोड का उपयोग कर सकते से:
SELECT OriginalName, SCHEMA_NAME(schema_id) + '.' + name AS [Name of Renamed Table], create_date
FROM tSQLt.Private_RenamedObjectLog
JOIN sys.objects ON ObjectId = object_id;
:
EXEC tSQLt.NewTestClass 'SOF_Example'
GO
CREATE TABLE SOF_Example.MyTable (i INT);
GO
INSERT INTO SOF_Example.MyTable (i) VALUES (5);
GO
CREATE PROCEDURE SOF_Example.[test fake a table]
AS
BEGIN
EXEC tSQLt.FakeTable 'SOF_Example.MyTable';
INSERT INTO SOF_Example.MyTable (i) VALUES (12);
COMMIT;
END;
GO
EXEC tSQLt.Run 'SOF_Example';
आप का नाम बदला तालिका लॉग गौर करने के लिए इस कोड का उपयोग कर सकते
यदि आपने कई बार परीक्षण फिर से निष्पादित किए हैं, तो आपके पास प्रत्येक फ़ेक्ड टेबल के लिए लॉग में कई प्रविष्टियां हो सकती हैं। आप create_date का उपयोग यह निर्धारित करने में सहायता के लिए कर सकते हैं कि मूल डेटा में कौन सा है।
अब, सभी ने कहा: डेटाबेस में परीक्षण मामलों को लिखना और निष्पादित करना सबसे अच्छा है जहां आपको डेटा को संरक्षित करना होगा। सबसे अच्छा तरीका डेटाबेस का उपयोग करना है जिसमें कोई उपयोगकर्ता डेटा नहीं है (केवल सबसे आवश्यक कॉन्फ़िगरेशन डेटा)। आपको रिक्त डेटाबेस से विकास और इकाई परीक्षण होना चाहिए। आबादी वाले डेटाबेस ऐसे एकीकरण, प्रयोज्य, प्रदर्शन, आदि के रूप परीक्षण के अन्य रूपों, के लिए इस्तेमाल किया जाना चाहिए
मैं tSQLt के साथ एक ही समस्या थी, और tSQLt.Private_RenamedObjectLog
तालिका की सामग्री का उपयोग कर सब कुछ बहाल करने में सक्षम थायह तालिका tSQLt ढांचे द्वारा बनाए रखी जाती है, और इसमें मूल सारणी के नाम शामिल होते हैं जो अस्थायी (यानी नकली) तालिकाओं के SQL ऑब्जेक्ट्स होते हैं। निम्नलिखित क्वेरी ने का उपयोग करते हुए नाटक किया तालिकाओं की सूची, और नाम है कि वे अस्थायी रूप से (यादृच्छिक ऐसे tSQLt_tempobject_3815e077fea84c7c रूप tSQLt द्वारा उत्पादित नाम) नाम दिया गया था:
SELECT
ObjectId, OriginalName,
OBJECT_SCHEMA_NAME(ObjectId) AS SchemaName,
OBJECT_NAME(ObjectId) AS TemporaryName
FROM
tSQLt.Private_RenamedObjectLog
SSMS में वस्तु एक्सप्लोरर रिफ्रेशिंग कि पता चला है इन यादृच्छिक नामों के साथ टेबल वास्तव में मौजूद थे, और वास्तव में उन्होंने मेरा मूल डेटा (whew !!) रखा था।
- एक
ROLLBACK TRANSACTION
की कोशिश की सिर्फ मामले कि यह हल में:मैं उसके बाद निम्न किया था। ऐसा नहीं हुआ
- डाटाबेस पर बैक किया गया (भले ही यह गड़बड़ हो गया हो)
- फर्जी तालिकाओं को छोड़ दिया (यानी।मूल नाम, नहीं अस्थायी नाम)
साथ लोगों टेबल्स) नाम बदलकर (वापस उनके मूल नाम के लिए अस्थायी नाम के साथ, हर तालिका के लिए इस का उपयोग करते हुए:
EXEC sp_rename 'schema.tempname', 'originalname'
साफ कर दिया गया के बाद मुझे पता था कि मेरी टेबल वापस थे तालिका tSQLt.Private_RenamedObjectLog,
DELETE FROM tSQLt.Private_RenamedObjectLog
का उपयोग कर
स्वचालित रूप से पुनर्स्थापना स्क्रिप्ट का उत्पादन करने के लिए प्रक्रिया बनाना आसान होगा! हो सकता है कि पहले से ही tSQLt में कोई है - किसी को इसके बारे में पता है?
यह केवल टेबल को वापस स्थानांतरित करने में संभालता है (क्योंकि यह समस्या ओपी और मैं दोनों की समस्या थी) लेकिन तालिका को छोड़ने वाली रेखा के साथ बंदर शायद यह अन्य ऑब्जेक्ट प्रकारों के साथ काम करेगा।
DECLARE @cmd nvarchar(MAX) = '';
WITH x AS (
SELECT TOP 10000
PL.Id AS Id
,PARSENAME(PL.OriginalName,1) AS OriginalName
,ISNULL(SO.name,'') AS name
,QUOTENAME(SCHEMA_NAME(ISNULL(SO.schema_id,1))) AS SchemaName
,ISNULL(SEP.major_id,-1) AS major_id
FROM tSQLt.Private_RenamedObjectLog PL
LEFT JOIN sys.objects SO
ON ObjectId = object_id
LEFT JOIN sys.extended_properties SEP
ON SEP.major_id = SO.object_id
AND SEP.name = 'tSQLt.FakeTable_OrgTableName'
ORDER BY SO.create_date DESC
)
SELECT @cmd = @cmd
+ CASE WHEN x.name = '' OR OriginalName = x.name
THEN N'DELETE tSQLt.Private_RenamedObjectLog WHERE Id = ' + CAST(x.Id AS nvarchar) + N';'
ELSE N'DROP '
+ N'TABLE' --Replace this with a CASE statement to deal with other object types
+ N' ' + SchemaName + '.' + QUOTENAME(x.OriginalName) + '; '
+ NCHAR(13) + NCHAR(10) + N'EXEC sp_rename ''' + SchemaName + N'.'
+ QUOTENAME(x.name) + N''',''' + OriginalName + N''';'
+ NCHAR(13) + NCHAR(10) + N'IF OBJECT_ID('''+SchemaName + N'.' + QUOTENAME(x.name)+N''') IS NULL'
+ NCHAR(13) + NCHAR(10) + N'BEGIN'
+ CASE WHEN x.major_id != -1
THEN NCHAR(13) + NCHAR(10) + N' EXEC sp_dropextendedproperty ''tSQLt.FakeTable_OrgTableName'',''SCHEMA'','''
+ PARSENAME(SchemaName,1) + N''',''TABLE'',''' + OriginalName + N''';'
ELSE ''
END
+ NCHAR(13) + NCHAR(10) + N' DELETE tSQLt.Private_RenamedObjectLog WHERE Id = ' + CAST(x.Id AS nvarchar) + N';'
+ NCHAR(13) + NCHAR(10) + N'END'
END
+ NCHAR(13) + NCHAR(10)
+ NCHAR(13) + NCHAR(10)
FROM x;
--/* <-Remove leading dashes to execute
PRINT @cmd;
--*/EXEC (@cmd);
- 1. मैं एक UINavigationController को रीसेट कैसे करूं?
- 2. मैं यह कैसे सुनिश्चित करूं कि जब मैं इसे पुन: सक्रिय करता हूं तो मैं टेस्ट कोड तोड़ नहीं देता?
- 3. ExtJS में, जब मैं ग्रिड प्रदर्शित करता हूं तो मैं स्टोर कैसे लोड करूं?
- 4. जब मैं ऑफस्क्रीन करता हूं तो अपडेट करने के लिए मैं UIWebView को कैसे मजबूर करूं?
- 5. जब मैं आईओसी का उपयोग करता हूं तो मैं ऑब्जेक्ट निपटान का प्रबंधन कैसे करूं?
- 6. मैं हास्केल में stdin कैसे रीसेट करूं?
- 7. मैं तालिका को रीसेट कैसे कर सकता हूं। DefaultView.RowFilter?
- 8. यदि स्ट्रिंग बराबर नहीं है तो मैं तुलना कैसे करूं?
- 9. जब मैं डिबगिंग नहीं कर रहा हूं तो मैं console.log को कैसे अक्षम करूं?
- 10. जब कर्सर emacs में ओवरले में प्रवेश करता है तो मैं एक प्रॉम्प्ट कैसे प्रदर्शित करूं?
- 11. जब डेटा तालिका में नहीं है, तो मैं आर में एक टेक्स्ट फ़ाइल कैसे पढ़ूं
- 12. UIScrollView ज़ूम के बाद मैं रीसेट कैसे करूं?
- 13. जब मैं क्लोजर में संख्याओं को विभाजित करता हूं तो मुझे एक अंश मिलता है, मैं दशमलव कैसे प्राप्त करूं?
- 14. स्क्लाइट: मैं सभी डेटाबेस टेबल कैसे रीसेट करूं?
- 15. जब मैं div पर क्लिक करता हूं तो document.execCommand क्यों काम नहीं करता है?
- 16. मैं ग्रोवी में एक नकली स्थैतिक विधि कैसे रीसेट करूं?
- 17. जब कोई RestClientException फेंक दिया जाता है तो मैं HTTP स्थिति कोड और प्रतिक्रिया निकाय को कैसे पुनर्प्राप्त करूं?
- 18. मैं एसटीएम 32 डिवाइस में अप्रत्याशित रीसेट कैसे डिबग करूं?
- 19. मैं UIGestureRecognizer को प्रोग्रामेटिक रूप से समाप्त/रीसेट कैसे करूं?
- 20. क्या मैं गणना करता हूं तो लिंक पहले सभी रिकॉर्ड पुनर्प्राप्त करता है?
- 21. जब मैं डायनेमोड में स्कैन() को कोई फ़िल्टर नहीं करता और केवल 10 ऑब्जेक्ट्स पुनर्प्राप्त करता हूं, तो क्या यह अभी भी पूरे डेटाबेस तक पहुंचता है?
- 22. मैं वेबस्पेयर एमक्यू कनेक्शन की स्थिति कैसे प्राप्त करूं और मैं कनेक्शन को रीसेट कैसे करूं:
- 23. जब मैं जेपीए का उपयोग कर रहा हूं तो मैं डेटाबेस विकास कैसे प्रबंधित करूं?
- 24. मौजूदा तालिका में एक्स्टबेस मैपिंग काम नहीं करता
- 25. जब मैं भाग बदलता हूं तो मैं पुन: संयोजन करने के लिए एमईएफ कैसे प्राप्त करूं?
- 26. svn: आखिरी बार जब मैं एक निश्चित रेखा बदल गई थी, तो मैं कैसे निर्धारित करूं?
- 27. मैं हडसन में उपयोगकर्ता पासवर्ड कैसे रीसेट करूं?
- 28. जब मैं किसी और के कोड को संशोधित करता हूं तो मैं जावाडोक को कैसे संशोधित करूं?
- 29. जब मैं एंकर पॉइंट सेट करता हूं, तो मेरी छवि
- 30. मैं .NET विंडोज प्रपत्र टेक्स्टबॉक्स बैककोलर प्रॉपर्टी कैसे रीसेट करूं?
अभी भी मेरे लिए टूल में एक बग जैसा लगता है। – JDPeckham
एसक्यूएल सर्वर एक लेनदेन को बंद करने की प्रक्रिया को अनुमति देता है जो इसे नहीं खुलता है। इसलिए यदि परीक्षण के तहत प्रक्रिया लेनदेन पर एक प्रतिबद्धता निष्पादित करती है जो टीएसक्यूएलटी खोला जाता है, तो टीएसक्यूएलटी फ्रेमवर्क उन कार्यों को कम करने की क्षमता खो देता है। सामान्य रूप से प्रक्रियाओं के भीतर लेनदेन का उपयोग करना एक बुरा विचार है। यदि आपको यह देखना है, तो इसे पहले देखें: http://sqlity.net/en/585/how-to-rollback-in-procedures/ तो, "टूल" में कोई बग नहीं, बल्कि हमारे पास कुछ है साथ रहने के लिए क्योंकि हम SQL सर्वर का उपयोग कर रहे हैं। –
समस्या को देखते हुए, इस तरह के गंभीर परिणाम हैं, अनुमान है कि ज्यादातर उपयोगकर्ताओं के लिए होने जा रहा है, और नाम बदलना संभव है; टूल में ऐसी प्रक्रिया शामिल नहीं है जो चीजों को पुनर्प्राप्त कर सके? यही है: नाम बदलें और उपयोगकर्ता की तरफ से रिवर्स में नाम बदलें। – bielawski