But later… public void TestMakingTransfer() { var amountToPay = 100; var currentAccount = accounts.GetCurrentAccount(); var initialAmount = currentAccount.GetBalance(); currentAccount.Pay(amountToPay); Assert.AreEqual(initialAmount, payingAccount.Amount - amountToPay); } crossplatform.io
And now? crossplatform.io Feature: Sending out money transfers A user with a valid account in our app would like to make payments to other users using local or foreign currencies Scenario 1: I’m sending my friend money Scenario 2: Paying my Internet bill
crossplatform.io BEHAVIOR DRIVEN DEV Outside-in Development philosophy in which the application code is written after its requirements have been defined
crossplatform.io A COLLABORATION TOOL Sit down and work together! Conversations tend to uncover assumptions between you and your user’s desired result.
crossplatform.io PEOPLE CENTRIC APPROACH Get to a common ground by discussing examples and using a language everyone can understand. Do your future self a favor!
crossplatform.io RESULTS Documented features tied directly to your development and testing process. Concrete, executable, easy-to-repeat behavior embodied in automated tests.
crossplatform.io Feature: Sending out money transfers Scenario 1: I’m sending my friend money Given I have a positive balance When I make a deposit in my friend’s account Then my account is debited And my friend’s account is credited
crossplatform.io SPECFLOW Cucumber for .NET Converts tests written in plain English (or other language) and into a test fixture Tests follow GIVEN / WHEN / THEN structure
crossplatform.io THE GOOD - find bugs that unit tests can't such as wiring bugs and environment bugs - tests are described in plain English - ensures the software, as a whole, is feature complete
crossplatform.io DO I NEED UI TESTS? Apps have changing requirements that reflect in the UI/UX Device fragmentation: do you support the specific UI of the app? It works on my device!
crossplatform.io What can the user see? Simulate UI interactions to provide some example of how your code is valuable to the user (have the rest of the tests at the class level)
crossplatform.io XAMARIN.UITEST Write C# tests, execute them with NUnit Interact with objects on the screen independent of screen size, orientation and layout
crossplatform.io XAMARIN.UITEST: Internals The IApp interface holds an instance of your app which you can interact with New it up before every test to prevent state from one test affecting the others
crossplatform.io XAMARIN.UITEST: REPL Interact with a screen while the app is running Explore the app screens Creating the queries on the fly Prototype tests interactively
crossplatform.io TEST RECORDER The Test Recorder is available as stand alone application (Mac) or a Visual Studio plugin that records Xamarin.UI tests for you.