Xamarin.Forms
Xamarin.Forms में BDD यूनिट परीक्षण
खोज…
टिप्पणियों
NUnit टेस्ट रनर के साथ कमांड और नेविगेशन का परीक्षण करने के लिए सरल स्पेकफ्लो
हमें यह क्यों चाहिये?
Xamarin.Forms में इकाई परीक्षण करने का वर्तमान तरीका एक मंच धावक के माध्यम से है, इसलिए आपके परीक्षण को ios, Android, विंडोज़ या मैक UI वातावरण में चलाना होगा : IDE में रनिंग टेस्ट
Xamarin Xamarin.TestCloud पेशकश के साथ भयानक UI परीक्षण भी प्रदान करता है, लेकिन जब BDD देव प्रथाओं को लागू करना चाहते हैं, और ViewModels और Commands का परीक्षण करने की क्षमता रखते हैं, जबकि स्थानीय स्तर पर या एक बिल्ड सर्वर पर सस्ते में यूनिट परीक्षण चलाने वाले नहीं होते हैं। रास्ते में बनाया गया।
मैंने एक लाइब्रेरी विकसित की है जो Xamarin के साथ Specflow का उपयोग करने की अनुमति देता है। आसानी से ViewModel तक की अपनी विशेषताओं को आसानी से लागू करने की अनुमति देता है, स्वतंत्र रूप से ऐप के लिए उपयोग किए जाने वाले किसी भी MVVM फ्रेमवर्क से स्वतंत्र रूप से (जैसे XLabs , MVVMCross , प्रिज्म )
यदि आप BDD में नए हैं, तो Specflow बाहर की जाँच करें।
उपयोग:
यदि आपके पास यह अभी तक नहीं है, तो यहां से (या आपके द्वारा विजुअल स्टूडियो आईडीई से) स्पेकफ्लो विजुअल स्टूडियो एक्सटेंशन इंस्टॉल करें: https://visualstudiogallery.msdn.microsoft.com/c74211e7-cb6e-4dfa-855d-df0ad4a37dd6
अपने Xamarin.Forms प्रोजेक्ट में एक क्लास लाइब्रेरी जोड़ें। वह आपकी परीक्षा परियोजना है।
अपने परीक्षण परियोजनाओं के लिए नौगेट से SpecFlow.Xamarin.Forms पैकेज जोड़ें।
अपने परीक्षण प्रोजेक्ट में एक वर्ग जोड़ें जो 'TestApp' को विरासत में मिला है, और नीचे दिए अनुसार, किसी भी DI पंजीकरण को जोड़ने के साथ-साथ अपने विचार / दृश्य जोड़े जोड़े।
public class DemoAppTest : TestApp { protected override void SetViewModelMapping() { TestViewFactory.EnableCache = false; // register your views / viewmodels below RegisterView<MainPage, MainViewModel>(); } protected override void InitialiseContainer() { // add any di registration here // Resolver.Instance.Register<TInterface, TType>(); base.InitialiseContainer(); } }
- अपने टेस्ट प्रोजेक्ट में एक SetupHook क्लास जोड़ें, ताकि आप Specflow हुक को जोड़ सकें। आपको नीचे दिए गए वर्ग, और आपके एप्लिकेशन को प्रारंभिक दृश्यमूल प्रदान करते हुए, नीचे दिए अनुसार परीक्षण एप्लिकेशन को बूटस्ट्रैप करना होगा:
[Binding] public class SetupHooks : TestSetupHooks { /// <summary> /// The before scenario. /// </summary> [BeforeScenario] public void BeforeScenario() { // bootstrap test app with your test app and your starting viewmodel new TestAppBootstrap().RunApplication<DemoAppTest, MainViewModel>(); } }
- आपको xamarin.forms फ्रेमवर्क को अनदेखा करने के लिए अपने xamarin.forms व्यू कोडबेहाइंड में एक कैच ब्लॉक जोड़ना होगा, ताकि आपको ऐप ui चलाने के लिए मजबूर किया जा सके (कुछ ऐसा जो हम नहीं करना चाहते):
public YourView() { try { InitializeComponent(); } catch (InvalidOperationException soe) { if (!soe.Message.Contains("MUST")) throw; } }
अपनी परियोजना में एक स्पेकफ़्लो फ़ीचर जोड़ें (बनाम विस्फ़ोटक एक्सटेंशन के साथ शिप किए गए वीचफ़्लो टेम्पलेट्स का उपयोग करके)
एक स्टेप क्लास बनाएं / बनाएं जो टेस्टस्टेपबेस को इनहेरिट करता हो, परिदृश्यकोटेक्स्ट पैरामीटर को आधार से गुजारें।
नेविगेट करने के लिए नेविगेशन सेवाओं और सहायकों का उपयोग करें, कमांड निष्पादित करें, और अपने दृश्य मॉडल का परीक्षण करें:
[Binding] public class GeneralSteps : TestStepBase { public GeneralSteps(ScenarioContext scenarioContext) : base(scenarioContext) { // you need to instantiate your steps by passing the scenarioContext to the base } [Given(@"I am on the main view")] public void GivenIAmOnTheMainView() { Resolver.Instance.Resolve<INavigationService>().PushAsync<MainViewModel>(); Resolver.Instance.Resolve<INavigationService>().CurrentViewModelType.ShouldEqualType<MainViewModel>(); } [When(@"I click on the button")] public void WhenIClickOnTheButton() { GetCurrentViewModel<MainViewModel>().GetTextCommand.Execute(null); } [Then(@"I can see a Label with text ""(.*)""")] public void ThenICanSeeALabelWithText(string text) { GetCurrentViewModel<MainViewModel>().Text.ShouldEqual(text); } }
MVVM के लिए उन्नत उपयोग
पहले उदाहरण में जोड़ने के लिए, एप्लिकेशन के भीतर होने वाले नेविगेशन स्टेटमेंट का परीक्षण करने के लिए, हमें नेविगेशन के लिए एक हुक के साथ ViewModel प्रदान करने की आवश्यकता है। इसे पाने के लिये:
- पैकेज जोड़ें SpecFlow.Xamarin.Forms.IViewModel अपने पीसीएल Xamarin.Form परियोजना के लिए nuget से
- अपने ViewModel में IViewModel इंटरफ़ेस लागू करें। यह केवल Xamarin.Forms की संपत्ति की संपत्ति का पर्दाफाश करेगा:
-
public class MainViewModel : INotifyPropertyChanged, IViewModel.IViewModel { public INavigation Navigation { get; set; }
- परीक्षण ढांचा उस उठाएगा और आंतरिक नेविगेशन का प्रबंधन करेगा
- आप आवेदन के लिए किसी भी MVVM फ्रेमवर्क का उपयोग कर सकते हैं (जैसे XLabs , MVVMCross , प्रिज्म ।