में easymock का उपयोग करके मैं परीक्षण करना चाहता हूं कि कुछ विधि विफल होने पर याद की जाएगी। कॉलिंग अलग थ्रेड में निष्पादित। तो मैं इसमल्टीथ्रेडिंग
final Foo mock = createStrictMock(Foo.class);
mock.bar();
expectLastCall().andThrow(new RuntimeException("TEST EXCEPTION"));
mock.bar();
replay(mock);
doStuff();
sleepSomeTime(); //Pretty dirty. But I need to test it in multithreading.
verify(mock);
और कोड उत्तीर्ण की तरह कोड लिखता हूं। लेकिन मैंने अभी तक याद नहीं किया है।
परीक्षण असफल बनाने के लिए, मैं
mock.bar();
expectLastCall().andThrow(new RuntimeException("TEST EXCEPTION"));
प्रतिस्थापित
mock.bar();
expectLastCall().andAnswer(new IAnswer<Void>() {
@Override
public Void answer() throws Throwable {
sleepSomeTime();
throw new RuntimeException("TEST EXCEPTION");
}
});
साथ लेकिन मैं मेरे सभी परीक्षण के आसपास sleepSomeTime जोड़ने पसंद नहीं है। इसके अलावा, मैं वास्तव में समझ नहीं पा रहा हूं, जबकि यह इस विशेष मामले में मदद करता है। तो,
देरी जोड़ने में मदद क्यों हुई?
ऐसी चीजें करने का सही तरीका क्या है?
यह सबसे अच्छा जवाब है। लेकिन मेरा मानना है कि यह ताले के बिना किया जाना चाहिए। –
अपने कोड के आधार पर, आप कॉलबैक में हुक कर सकते हैं ताकि आपकी सत्यापन विधियां कॉलबैक में की जा सकें जो आप अपने नकली आखिरी पंक्ति में उलझ जाते हैं। –