मैं स्कालाटेस्ट का उपयोग करके स्कैला में लिखे गए एक पार्सर का परीक्षण कर रहा हूं। पार्सर एक समय में एक फ़ाइल हैंडल और यह निम्नलिखित की तरह एक सिंगलटन वस्तु है:स्कैलाटेस्ट: सिंगलटन ऑब्जेक्ट पुन: प्रारंभिकरण के साथ मुद्दे
class Parser{...}
object Resolver {...}
परीक्षण का मामला मैं लिखा है इस
describe("Syntax:") {
val dir = new File("tests\\syntax");
val files = dir.listFiles.filter(
f => """.*\.chalice$""".r.findFirstIn(f.getName).isDefined);
for(inputFile <- files) {
val parser = new Parser();
val c = Resolver.getClass.getConstructor();
c.setAccessible(true);
c.newInstance();
val iserror = errortest(inputFile)
val result = invokeparser(parser,inputFile.getAbsolutePath) //local method
it(inputFile.getName + (if (iserror)" ERR" else " NOERR")){
if (!iserror) result should be (ResolverSuccess())
else if(result.isInstanceOf[ResolverError]) assert(true)
}
}
}
अब पिछले के साइड इफेक्ट यात्रा प्रत्येक पर की तरह कुछ हद तक है सिंगलटन ऑब्जेक्ट रिजॉल्वर के अंदर पुनरावृत्तियों को साफ़ नहीं किया जाता है।
क्या सिंगलटन ऑब्जेक्ट को फिर से शुरू करने के लिए स्केलेटेस्ट मॉड्यूल को निर्दिष्ट करने का कोई तरीका है?
अद्यतन: डैनियल के सुझाव का उपयोग करना, मैं कोड को अद्यतन किया है, यह भी अधिक जानकारी के लिए जोड़ा।
अद्यतन: स्पष्ट रूप से यह पार्सर है जो कुछ ख़राब कर रहा है। बाद की कॉल में यह पिछले एएसटी को त्याग नहीं करता है। अजीब। के बाद से इस विषय बंद है, मैं और अधिक सब
अंतिम अद्यतन जवाब देने के लिए धन्यवाद खुदाई हैं और शायद चर्चा के लिए एक अलग थ्रेड का उपयोग करें,: इस मुद्दे को एक सिंगलटन रिज़ॉल्वर के अलावा अन्य वस्तु के साथ था, यह कुछ अन्य फ़ाइल में था इसलिए मैंने इसे किसी भी तरह याद किया था। मैं डैनियल स्पिवाक के जवाब का उपयोग करके इसे हल करने में सक्षम था। यह चीजों को करने का गंदा तरीका है, लेकिन यह भी एकमात्र चीज है, मेरी परिस्थितियों को देखते हुए और यह भी तथ्य दिया गया है कि मैं एक टेस्ट कोड लिख रहा हूं, जो उत्पादन के उपयोग में नहीं जा रहा है।
क्या 'आर' के अंदर कोई क्लीन-अप विधि है, या क्या आप इसे फिर से बनाए जाने की उम्मीद करते हैं? –
आर में कोई क्लीनअप विधि नहीं है और मैं कोड नहीं बदल सकता। क्या आप स्कैला में सिंगलटन ऑब्जेक्ट्स को फिर से बना सकते हैं? – thequark
नहीं। वे सख्ती से सिंगलेट हैं। ऑन-डिमांड शुरू किया गया (जैसा कि जेवीएम के वर्ग लोडिंग द्वारा निर्धारित किया गया है) और उसके बाद शाश्वत। वे निश्चित रूप से किसी भी स्काला कक्षाओं के साथ, परिवर्तनीय आंतरिक स्थिति हो सकती है। –