मैं अक्सर यह साबित करने के लिए यूनिट परीक्षण लिखता हूं कि कोड का कुछ सेट थ्रेड सुरक्षित है। आम तौर पर, मैं उत्पादन में पाए गए बग के जवाब में इन परीक्षणों को लिखता हूं। इस मामले में, परीक्षण का उद्देश्य दर्शाता है कि बग को दोहराया जाता है (परीक्षण विफल रहता है), और नया कोड थ्रेडिंग समस्या (परीक्षण पास) को ठीक करता है, और फिर भावी रिलीज के लिए एक रिग्रेशन टेस्ट के रूप में कार्य करता है।
अधिकांश परीक्षण थ्रेड सुरक्षा परीक्षण मैंने एक धागा दौड़ की स्थिति का परीक्षण किया है, लेकिन कुछ थ्रेड डेडलॉक्स के लिए भी परीक्षण करते हैं।
सक्रिय रूप से इकाई परीक्षण कोड थ्रेड सुरक्षित थोड़ा और मुश्किल है। ऐसा नहीं है क्योंकि इकाई परीक्षण लिखना अधिक कठिन है, लेकिन क्योंकि आपको निर्धारित करने के लिए ठोस विश्लेषण करना है (अनुमान है, वास्तव में,) थ्रेड असुरक्षित हो सकता है। यदि आपका विश्लेषण सही है, तो आप एक ऐसा परीक्षण लिखने में सक्षम होना चाहिए जो तब तक विफल हो जब तक कि आप कोड थ्रेड सुरक्षित न करें।
जब एक धागा रेस स्थिति के लिए परीक्षण, मेरा परीक्षण लगभग हमेशा एक ही पैटर्न का पालन करें: (इस स्यूडोकोड है)
boolean failed = false;
int iterations = 100;
// threads interact with some object - either
Thread thread1 = new Thread(new ThreadStart(delegate() {
for (int i=0; i<iterations; i++) {
doSomething(); // call unsafe code
// check that object is not out of synch due to other thread
if (bad()) {
failed = true;
}
}
});
Thread thread2 = new Thread(new ThreadStart(delegate() {
for (int i=0; i<iterations; i++) {
doSomething(); // call unsafe code
// check that object is not out of synch due to other thread
if (bad()) {
failed = true;
}
}
});
thread1.start();
thread2.start();
thread1.join();
thread2.join();
Assert.IsFalse(failed, "code was thread safe");
स्रोत
2012-02-27 19:34:30
एक सामान्य नियम के आप इकाई परीक्षण उपयोग नहीं कर सकते ** साबित करने के लिए के रूप में ** कि कोड है या तो धागा सुरक्षित है या नहीं थ्रेड-सुरक्षित। –
@ डेविड हेफरन उम्मम्म ..... मदद! – Jon
अधिकतर आपको कोड के बारे में तर्क देकर इस तरह के सत्यापन करना है।मार्क का वर्णन करने वाले प्रकार के परीक्षण बहुत उपयोगी हैं और बहुत लाभ देते हैं। लेकिन वे कुछ साबित करने से कम हो जाते हैं। –