2013-01-02 27 views
7

मैं एक विंडोज स्टोर ऐप बना रहा हूं लेकिन मेरे पास एक विधि का परीक्षण करने वाली थ्रेड समस्याएं हैं जो ग्रिड (जो एक्सएएमएल नियंत्रण है) बनाता है। मैंने एनयूनीट और एमएसटीएस्ट का उपयोग करके परीक्षण करने की कोशिश की है।यूनिट परीक्षण विंडोज 8 स्टोर ऐप यूआई (एक्सएमएल कंट्रोल)

परीक्षण विधि है:

[TestMethod] 
public void CreateThumbnail_EmptyLayout_ReturnsEmptyGrid() 
{ 
    Layout l = new Layout(); 
    ThumbnailCreator creator = new ThumbnailCreator(); 
    Grid grid = creator.CreateThumbnail(l, 192, 120); 

    int count = grid.Children.Count; 
    Assert.AreEqual(count, 0); 
} 

और creator.CreateThumbnail (विधि है जो त्रुटि फेंकता):

:

public Grid CreateThumbnail(Layout l, double totalWidth, double totalHeight) 
{ 
    Grid newGrid = new Grid(); 
    newGrid.Width = totalWidth; 
    newGrid.Height = totalHeight; 

    SolidColorBrush backGroundBrush = new SolidColorBrush(BackgroundColor); 
    newGrid.Background = backGroundBrush; 

    newGrid.Tag = l;    
    return newGrid; 
} 

यह इस त्रुटि फेंकता है जब मैं इस परीक्षण चलाने

System.Exception: The application called an interface that was marshalled for a different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD)) 

उत्तर

9

आपके नियंत्रण से संबंधित कोड को UI थ्रेड पर चलाने की आवश्यकता है। आज़माएं:

[TestMethod] 
async public Task CreateThumbnail_EmptyLayout_ReturnsEmptyGrid() 
{ 
    int count = 0; 
    await ExecuteOnUIThread(() => 
    { 
     Layout l = new Layout(); 
     ThumbnailCreator creator = new ThumbnailCreator(); 
     Grid grid = creator.CreateThumbnail(l, 192, 120); 
     count = grid.Children.Count; 
    }); 

    Assert.AreEqual(count, 0); 
} 

public static IAsyncAction ExecuteOnUIThread(Windows.UI.Core.DispatchedHandler action) 
{ 
    return Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, action); 
} 

उपर्युक्त एमएस टेस्ट पर काम करना चाहिए। मुझे नुनीत के बारे में पता नहीं है।

+0

आपको बहुत बहुत धन्यवाद। यह एमएस टेस्ट में काम करता है। न्यूनिट में यह काम नहीं करता है। –